客户端核心代码:
// 登录服务器
private void btnlogin_Click(object sender, EventArgs e)
{
// 创建接受套接字
IPAddress clientIP = IPAddress.Parse(txtLocalIP.Text);
clientIPEndPoint = new IPEndPoint(clientIP, int.Parse(txtlocalport.Text));
receiveUdpClient = new UdpClient(clientIPEndPoint);
// 启动接收线程
Thread receiveThread = new Thread(ReceiveMessage);
receiveThread.Start();
// 匿名发送
sendUdpClient = new UdpClient(0);
// 启动发送线程
Thread sendThread = new Thread(SendMessage);
sendThread.Start(string.Format("login,{0},{1}", txtusername.Text, clientIPEndPoint));
btnlogin.Enabled = false;
btnLogout.Enabled = true;
this.Text = txtusername.Text;
}
// 客户端接受服务器回应消息
private void ReceiveMessage()
{
IPEndPoint remoteIPEndPoint = new IPEndPoint(IPAddress.Any,0);
while (true)
{
try
{
// 关闭receiveUdpClient时会产生异常
byte[] receiveBytes = receiveUdpClient.Receive(ref remoteIPEndPoint);
string message = Encoding.Unicode.GetString(receiveBytes,0,receiveBytes.Length);
// 处理消息
string[] splitstring = message.Split(',');
switch (splitstring[0])
{
case "Accept":
try
{
tcpClient = new TcpClient();
tcpClient.Connect(remoteIPEndPoint.Address, int.Parse(splitstring[1]));
if (tcpClient != null)
{
// 表示连接成功
networkStream = tcpClient.GetStream();
binaryReader = new BinaryReader(networkStream);
}
}
catch
{
MessageBox.Show("连接失败", "异常");
}
Thread getUserListThread = new Thread(GetUserList);
getUserListThread.Start();
break;
case "login":
string userItem = splitstring[1] + "," + splitstring[2];
AddItemToListView(userItem);
break;
case "logout":
RemoveItemFromListView(splitstring[1]);
break;
case "talk":
for (int i = 0; i < chatFormList.Count; i++)
{
if (chatFormList[i].Text == splitstring[2])
{
chatFormList[i].ShowTalkInfo(splitstring[2], splitstring[1], splitstring[3]);
}
}
break;
}
}
catch
{
break;
}
}
}
// 从服务器获取在线用户列表
private void GetUserList()
{
while (true)
{
userListstring = null;
try
{
userListstring = binaryReader.ReadString();
if (userListstring.EndsWith("end"))
{
string[] splitstring = userListstring.Split(';');
for (int i = 0; i < splitstring.Length - 1; i++)
{
AddItemToListView(splitstring[i]);
}
binaryReader.Close();
tcpClient.Close();
break;
}
}
catch
{
break;
}
}
}
// 发送登录请求
private void SendMessage(object obj)
{
string message = (string)obj;
byte[] sendbytes = Encoding.Unicode.GetBytes(message);
IPAddress remoteIp = IPAddress.Parse(txtserverIP.Text);
IPEndPoint remoteIPEndPoint = new IPEndPoint(remoteIp, int.Parse(txtServerport.Text));
sendUdpClient.Send(sendbytes, sendbytes.Length, remoteIPEndPoint);
sendUdpClient.Close();
}










