服务端代码
class SocketService
{
Socket SocketServer { get; set; }
List<Socket> SocketList { get; set; } = new();
private bool isStopAccept { get; set; }
public void SetSocketService(IPAddress ip, int port)
{
SocketServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint endPoint = new IPEndPoint(ip, port);
SocketServer.Bind(endPoint);
SocketServer.Listen(1000);
isStopAccept = true;
Thread acceptT = new Thread(AcceptMethod);
acceptT.IsBackground = true;
acceptT.Start(SocketServer);
}
public void AcceptMethod(object obj)
{
try
{
Socket acceptObj = obj as Socket;
if (acceptObj != null)
{
while (isStopAccept)
{
Socket acceptS = acceptObj.Accept();
SocketList.Add(acceptS);
acceptS.Send(Encoding.UTF8.GetBytes("你说:公主请连接.."));
Thread receiveT = new Thread(RecevieMethod);
receiveT.IsBackground = true;
receiveT.Start(acceptS);
}
}
}
catch
{
foreach (Socket s in SocketList)
{
s.Close();
}
isStopAccept = false;
}
}
public void RecevieMethod(object obj)
{
Socket receiveObj = obj as Socket;
if (receiveObj != null)
{
while (true)
{
try
{
byte[] buffer = new byte[1024];
int r = receiveObj.Receive(buffer);
if (r > 0)
{
string str = Encoding.UTF8.GetString(buffer, 0, r);
}
receiveObj.Send(Encoding.UTF8.GetBytes("你在说啥呢"));
}
catch
{
receiveObj.Close();
}
}
}
}
}
客户端代码
private void InitSocket()
{
try
{
SocketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ip = IPAddress.Parse("127.0.0.1");
IPEndPoint endPoint = new IPEndPoint(ip, 4309);
SocketClient.Connect(endPoint);
IsConnect = true;
Thread thread = new Thread(ClientReceiveInfo);
thread.IsBackground = true;
thread.Start();
}
catch (Exception e)
{
IsConnect = false;
MessageBox.Show("网络设置失败!!!");
LogWrite.Error(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 网络设置失败!!!" + e.Message);
}
}
private void ClientReceiveInfo()
{
while (IsConnect)
{
try
{
byte[] buffer = new byte[1024];
int r = SocketClient.Receive(buffer);
if (r > 0)
{
string str = Encoding.UTF8.GetString(buffer, 0, r);
SocketClient.Send(Encoding.UTF8.GetBytes("你说王子请连接."));
}
}
catch
{
IsConnect = false;
MessageBox.Show("接收信号失败!!!");
LogWrite.Error(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 接收信号失败!!!");
}
}
}
public void JudgmentSocketConn()
{
if ((SocketClient .Poll(1000, SelectMode.SelectRead) && (GASocket.Available == 0)) || !SocketClient .Connected)
{
Console.WriteLine("Socket 客户端断开连接");
}
}
public void Reconnect()
{
SocketClient .Close();
InitSocket();
}