while(socket.IsConnected == true)
{
……
Byte[] buffer=new Byte[1024];
Client_Socket.Receive(buffer,buffer.Length,0);
……
} FormClosing事件:
{
socket.SutDown(Both);
socket.Close();
}
应该可用
{
……
Byte[] buffer=new Byte[1024];
Client_Socket.Receive(buffer,buffer.Length,0);
……
} FormClosing事件:
{
socket.SutDown(Both);
socket.Close();
}
应该可用
解决方法就是必须加上try代码块.
“您的主机中的软件放弃了一个已建立的连接! ”
调试的时候我发现始终是
Client_Socket.Receive(buffer,buffer.Length,0);
这一句出现错误!
是上面原因?OnClosed事件中的
Client_Socket.close() 语句不能正常执行??
可是我不想让它弹出这些信息,怎么办?
而且我发现在OnClosed事件中的一些其他的语句也没有执行
(我在OnClosed事件刚开始执行的时候向服务器发送退出指令,但调试时在服务器并没有接收到,为什么呢?在不关闭的时候客户端和服务器能正常通信!)
请教……
Private Void ReceivedFormServer()
{
while(true)
{
if(Client_Socket.Connected)
{
……
Byte[] buffer=new Byte[1024];
Client_Socket.Receive(buffer,buffer.Length,0);
……
}
}
}
我已经判断了,但是Socket的Connected属性为 获取一个值,用来表示上一次执行send或receive操作是否成功连接到远程主机,
你应该是说的Connected吧,没有你说的IsConnected
还有问题就是.我在服务器端定义了一个arraylist数组,用来存在每一个新连接的客户端的信息,我刚才调试了,发现在服务器端当接收到客户端退出时发送的数据后,在arraylist中检索,找到相应的客户端后,执行与之相对应的客户端的socket、thread 关闭和释放操作,都会出现错误,就是执行完语句后没反应!!
如:cl.Clien_Socket.close();
cl.Client_Thread.Abort();
MessageBox.show("aa");
就不能弹出aa的信息,也就是程序执行到上面两句后就没了反映!
什么原因??还有一个问题就是,我想把服务器和客户端都做成随系统启动自动运行的,同时不希望有界面,相应的数据存在数据库中,另外有控制台可以查看和操作,现在想把服务器和客户端做成没界面,也就是没有Form界面,该怎么做???
可以用shutdown方法
socket.Shutdown(SocketShutdown how)
我写成
socket.Shutdown(SocketShutdown.Both)
执行完这条语句还是有错误!