最近从MFC的套接字转到C#
感觉有很多地方不一样我有一下几个问题:
1.在MFC中当客户端主动并且合法地关闭套接字时,服务器有FD_CLOSE消息,但是C#怎么做到同样的功能呢?
2.看下面代码(服务端的) private void StartServer_Click(object sender, EventArgs e)
{
if (ServerState == false)
{
localhost = Dns.GetHostEntry(Dns.GetHostName());
myIP = localhost.AddressList[0];
iep = new IPEndPoint(myIP, 8080);
try
{
ser_sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
ser_sock.Bind(iep);
ser_sock.Listen(5);
ServerState = true;
ser_sock.BeginAccept(new AsyncCallback(AcceptConnection), ser_sock);
}
catch
{
this.serverinfo.Text += "Could not start server!\r\n";
}
}
else
{
try
{
//accept_sock.Close(); //去掉这个注释后还是有错,我想这样来关闭与客户端的连接
ser_sock.Close();
ServerState = false;
}
catch
{
MessageBox.Show("An error occurs");
}
} }
private void AcceptConnection(IAsyncResult ar)
{
Socket temp_sock = (Socket)ar.AsyncState;
if (accept_sock.Connected)
return;
accept_sock = temp_sock.EndAccept(ar);
this.CurrentConn.Items.Add(accept_sock.RemoteEndPoint.ToString());
this.serverinfo.Text +=DateTime.Now.ToString()+" "+accept_sock.RemoteEndPoint.ToString()+ " connected.\r\n";
ser_sock.BeginAccept(new AsyncCallback(AcceptConnection), accept_sock);
}我想点一个按钮后启动服务,再点一次该按钮就关闭服务
不过按照我这样写,当关闭服务时就程序出错
3.怎么在客户端主动关闭与服务端的连接,并能通知服务端关闭消息
感觉有很多地方不一样我有一下几个问题:
1.在MFC中当客户端主动并且合法地关闭套接字时,服务器有FD_CLOSE消息,但是C#怎么做到同样的功能呢?
2.看下面代码(服务端的) private void StartServer_Click(object sender, EventArgs e)
{
if (ServerState == false)
{
localhost = Dns.GetHostEntry(Dns.GetHostName());
myIP = localhost.AddressList[0];
iep = new IPEndPoint(myIP, 8080);
try
{
ser_sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
ser_sock.Bind(iep);
ser_sock.Listen(5);
ServerState = true;
ser_sock.BeginAccept(new AsyncCallback(AcceptConnection), ser_sock);
}
catch
{
this.serverinfo.Text += "Could not start server!\r\n";
}
}
else
{
try
{
//accept_sock.Close(); //去掉这个注释后还是有错,我想这样来关闭与客户端的连接
ser_sock.Close();
ServerState = false;
}
catch
{
MessageBox.Show("An error occurs");
}
} }
private void AcceptConnection(IAsyncResult ar)
{
Socket temp_sock = (Socket)ar.AsyncState;
if (accept_sock.Connected)
return;
accept_sock = temp_sock.EndAccept(ar);
this.CurrentConn.Items.Add(accept_sock.RemoteEndPoint.ToString());
this.serverinfo.Text +=DateTime.Now.ToString()+" "+accept_sock.RemoteEndPoint.ToString()+ " connected.\r\n";
ser_sock.BeginAccept(new AsyncCallback(AcceptConnection), accept_sock);
}我想点一个按钮后启动服务,再点一次该按钮就关闭服务
不过按照我这样写,当关闭服务时就程序出错
3.怎么在客户端主动关闭与服务端的连接,并能通知服务端关闭消息
if(size==0)
{
客户端主动断开
}
比如
if(socket.isConnected==true)
Console.Write("The client is still keeping connecting with server.");有没有类似这样的方法?