首先,在主程序加载时,增加load事件。
(主程序担任服务器的角色)
下面展示一些 内联代码片
。
this.Loaded += Window_Loaded;
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Thread listenerThread = new Thread(ListenForClients);
listenerThread.Start();
}
private void ListenForClients()
{
TcpListener server = null;
try
{
Int32 port = 12345;
IPAddress localAddr = IPAddress.Parse("127.0.0.1");
// 创建TCP监听器
server = new TcpListener(localAddr, port);
// 开始监听连接请求
server.Start();
while (true)
{
// 等待客户端连接
TcpClient client = server.AcceptTcpClient();
HandleClient clientThread = new HandleClient(client);
//clientThread.Start();
}
}
catch (SocketException e)
{
Console.WriteLine("SocketException: {0}", e);
}
finally
{
if (server != null)
server.Stop();
}
}
public class HandleClient
{
private TcpClient client;
public HandleClient(TcpClient tcpClient)
{
this.client = tcpClient;
Task.Run(GetSocket);
}
public void GetSocket()
{
try
{
byte[] data = new byte[1024];
NetworkStream stream = client.GetStream();
while (true)
{
int length;
// 读取客户端发来的数据
length = stream.Read(data, 0, data.Length);
string message = Encoding.ASCII.GetString(data, 0, length);
Console.WriteLine("Received: {0}", message);
// 这里可以添加逻辑来处理接收到的消息
// 并向客户端发送响应
byte[] response = Encoding.ASCII.GetBytes("Server received your message.");
stream.Write(response, 0, response.Length);
}
}
catch (Exception)
{
}
}
主程序完成后,客户端的代码也很简单,如下
下面展示一些 内联代码片
。
private void SendMessage_Click(object sender, RoutedEventArgs e)
{
TcpClient client = new TcpClient();
try
{
client.Connect("127.0.0.1", 12345);
NetworkStream stream = client.GetStream();
byte[] sendBytes = Encoding.ASCII.GetBytes("Hello from Client!");
stream.Write(sendBytes, 0, sendBytes.Length);
byte[] receivedBytes = new byte[1024];
StringBuilder receivedMessage = new StringBuilder();
int bytes = stream.Read(receivedBytes, 0, receivedBytes.Length);
receivedMessage.Append(Encoding.ASCII.GetString(receivedBytes, 0, bytes));
Console.WriteLine("Received: {0}", receivedMessage.ToString());
client.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
通过操作触发代码后,就可以实现客户端与服务器之间的消息互通。此为小demo,具体逻辑还需自行优化。