public class TCPServer
{
Dictionary<string, Socket> clientSockets = new Dictionary<string, Socket>();
Socket socketwatch = null;
public void StartListen()
{
socketwatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress address = IPAddress.Parse("127.0.0.1");
IPEndPoint point = new IPEndPoint(address, 8098);
socketwatch.Bind(point);
socketwatch.Listen(20);
Thread threadwatch = new Thread(watchconnecting);
threadwatch.IsBackground = true;
threadwatch.Start();
}
void watchconnecting()
{
Socket connection = null;
while (true)
{
try
{
connection = socketwatch.Accept();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
break;
}
IPAddress clientIP = (connection.RemoteEndPoint as IPEndPoint).Address;
int clientPort = (connection.RemoteEndPoint as IPEndPoint).Port;
string sendmsg = "连接服务端成功!\r\n" + "本地IP:" + clientIP + ",本地端口" + clientPort.ToString();
byte[] arrSendMsg = Encoding.UTF8.GetBytes(sendmsg);
connection.Send(arrSendMsg);
string remoteEndPoint = connection.RemoteEndPoint.ToString();
Console.WriteLine("成功与" + remoteEndPoint + "客户端建立连接!\t\n");
clientSockets.Add(remoteEndPoint, connection);
Thread thread = new Thread(recv);
thread.IsBackground = true;
thread.Start(connection);
}
}
void recv(object socketclientpara)
{
Socket socketServer = socketclientpara as Socket;
while (true)
{
byte[] arrServerRecMsg = new byte[1024 * 1024];
try
{
int length = socketServer.Receive(arrServerRecMsg);
string strSRecMsg = Encoding.UTF8.GetString(arrServerRecMsg, 0, length);
Console.WriteLine("客户端:" + socketServer.RemoteEndPoint + ",time:" + GetCurrentTime() + "\r\n" + strSRecMsg + "\r\n\n");
socketServer.Send(Encoding.UTF8.GetBytes("测试server 是否可以发送数据给client "));
}
catch(Exception ex)
{
clientSockets.Remove(socketServer.RemoteEndPoint.ToString());
Console.WriteLine("Client Count:" + clientSockets.Count);
Console.WriteLine("客户端" + socketServer.RemoteEndPoint + "已经中断连接" + "\r\n" + ex.Message + "\r\n" + ex.StackTrace + "\r\n");
socketServer.Close();
break;
}
}
}
string GetCurrentTime()
{
return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}
}
public class TCPClient
{
Socket socketclient = null;
public void StartConnection()
{
socketclient=new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress address = IPAddress.Parse("127.0.0.1");
IPEndPoint point = new IPEndPoint(address, 8098);
try
{
socketclient.Connect(point);
}
catch (Exception ex)
{
Console.WriteLine("连接失败\r\n");
return;
}
Thread threadclient = new Thread(recv);
threadclient.IsBackground = true;
threadclient.Start();
}
void recv()
{
int x = 0;
while (true)
{
try
{
byte[] arrRecvmsg = new byte[1024 * 1024];
int length = socketclient.Receive(arrRecvmsg);
string strRevMsg = Encoding.UTF8.GetString(arrRecvmsg, 0, length);
if (x == 1)
{
Console.WriteLine("服务器:" + GetCurrentTime() + "\r\n" + strRevMsg + "\r\n\n");
}
else
{
Console.WriteLine(strRevMsg + "\r\n\n");
x = 1;
}
}
catch(Exception ex)
{
Console.WriteLine("远程服务器已经中断连接" + "\r\n");
break;
}
}
}
void ClientSendMsg(string sendMsg)
{
byte[] arrClientSendMsg = Encoding.UTF8.GetBytes(sendMsg);
socketclient.Send(arrClientSendMsg);
Console.WriteLine("hello...." + ": " + GetCurrentTime() + "\r\n" + sendMsg + "\r\n\n");
}
string GetCurrentTime()
{
return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}
}
转自--- C#使用Socket实现一个socket服务器与多个socket客户端通信 - cctext - 博客园 (cnblogs.com)