第一次做socket程序,做一个局域网聊天工具,其中一个文件传输功能,我仿照的网上代码学习的,但是在绑定套接字过程中出现了问题:
//创建一个网络端点
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, int.Parse("1005"));
//MessageBox.Show(IPAddress.Any); //创建一个套接字
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
//绑定套接字到端口
server.Bind(ipep);
//开始侦听(并堵塞该线程)
server.Listen(10);
}
catch
{
}
while (true)
{ try
{
Socket client = server.Accept();
ClientSocket = client;
Thread TempThread = new Thread(new ThreadStart(this.Create));
TempThread.Start();
}
catch (Exception ex)
{
}
}
如果两个人互相传输文件,第一次没有问题,但是如果接收方关闭聊天窗口,发送方再次向接收方发送文件,接收方就会提示错误:套接字不能重复绑定,如果catch掉以后,就报:server必须使用Bind方法,请教各位前辈,这该如何解决
//创建一个网络端点
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, int.Parse("1005"));
//MessageBox.Show(IPAddress.Any); //创建一个套接字
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
//绑定套接字到端口
server.Bind(ipep);
//开始侦听(并堵塞该线程)
server.Listen(10);
}
catch
{
}
while (true)
{ try
{
Socket client = server.Accept();
ClientSocket = client;
Thread TempThread = new Thread(new ThreadStart(this.Create));
TempThread.Start();
}
catch (Exception ex)
{
}
}
如果两个人互相传输文件,第一次没有问题,但是如果接收方关闭聊天窗口,发送方再次向接收方发送文件,接收方就会提示错误:套接字不能重复绑定,如果catch掉以后,就报:server必须使用Bind方法,请教各位前辈,这该如何解决
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
//绑定套接字到端口
server.Bind(ipep);
//开始侦听(并堵塞该线程)
server.Listen(10);
这段代码在程序中执行一次就行了
不要重复绑定把它们和下面的代码分开。
关闭聊天窗体是不是等于关闭接收了
那样你是不是应该释放socket资源
自己想想看
最好参考下MSDN的写法
是connect还是Send?
为什么这两个操作会让接收方再次装载窗体?
你再考虑考虑程序的架构是否合理