C#窗体聊天小程序 客户端第一次可以和服务器端正常连接和发送消息,把客户端断开连接,再重新连接后,服务器端就不能收到消息,这是什么问题?请指教! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果是用winForm开发的,有可能socket抛出异常了或者服务器端窗体失去焦点了。 是这样的:server:private TcpListener listener; private TcpClient client; private Thread thread1; private void buttonStart_Click(object sender, EventArgs e) { this.buttonStart.Enabled = false; IPAddress ip = IPAddress.Parse(this.textBoxIP.Text); Int32 port = Int32.Parse(this.textBoxPort.Text); listener=new TcpListener(ip,port); listener.Start(10); client = listener.AcceptTcpClient(); if (client.Connected) { this.listBoxState.Items.Add("与客户" + client.Client.RemoteEndPoint.ToString() + "建立链接"); thread1 = new Thread(new ThreadStart(AcceptMessage)); thread1.Start(); } } private void AcceptMessage() { while (true) { try { NetworkStream netStream = client.GetStream(); byte[] buffer = new byte[1024]; int bytesRead = netStream.Read(buffer, 0, 1024); string message = Encoding.Unicode.GetString(buffer, 0, bytesRead); this.richTextBoxAccept.Rtf = message; } catch { this.listBoxState.Items.Add("与客户断开连接"); break; } } } private void buttonSend_Click(object sender, EventArgs e) { string message = this.richTextBoxSend.Rtf; byte[] buffer =Encoding.Unicode.GetBytes(message); try { NetworkStream netStream = client.GetStream(); netStream.Write(buffer, 0, buffer.Length); this.richTextBoxSend.Text = ""; } catch { MessageBox.Show("无法发送!"); } } private void buttonStop_Click(object sender, EventArgs e) { this.buttonStart.Enabled = true; try { listener.Stop(); listener = null; if (client.Connected) { client.Close(); thread1.Abort(); } this.listBoxState.Items.Add("停止监听"); } catch { MessageBox.Show("监听尚未开始,关闭无效"); } }client: private TcpClient client; private Thread thread1; private void buttonRequest_Click(object sender, EventArgs e) { IPAddress ip = IPAddress.Parse(this.textBoxIP.Text); client = new TcpClient(); Int32 port = Int32.Parse(this.textBoxPort.Text); try { client.Connect(ip, port); } catch { MessageBox.Show("与服务器连接失败"); } this.buttonRequest.Enabled = false; this.listBoxState.Items.Add("与服务器连接成功"); thread1 = new Thread(new ThreadStart(AcceptMessage)); thread1.Start(); } private void AcceptMessage() { while (true) { try { NetworkStream netStream = client.GetStream(); byte[] buffer = new byte[1024]; int bytesRead = netStream.Read(buffer, 0, 1024); string message = Encoding.Unicode.GetString(buffer, 0, bytesRead); this.richTextBoxReceive.Rtf =message; } catch { this.listBoxState.Items.Add("与服务器断开连接"); break; } } } private void buttonClose_Click(object sender, EventArgs e) { try { client.Close(); this.listBoxState.Items.Add("与主机断开连接"); thread1.Abort(); } catch { MessageBox.Show("尚未与主机连接,断开无效!"); } this.buttonRequest.Enabled = true; } private void buttonSend_Click(object sender, EventArgs e) { string message = this.richTextBoxSend.Rtf; byte[] buffer = Encoding.Unicode.GetBytes(message); try { NetworkStream netStream = client.GetStream(); netStream.Write(buffer, 0, buffer.Length); this.richTextBoxSend.Rtf = ""; } catch { MessageBox.Show("无法发送!"); } } 向数据库插入中文出现乱码 [算法]来玩玩算法吧-数组对比的问题 webservice返回值的问题? 求救!关于Attribute的问题!!! 控制台程序 输入一串字符,然后让他反向输出?怎么做? 请教如何获取 API 的所有参数名? 有关建立类似IIS日志生成时的缓存区? combox中有多个字体颜色,怎么改变字体颜色 如何在richTextBox中显示从串口接收到的数据啊? 外部组件发生异常。 怎么修改dll的名称和显示信息 C#的Math.Sin()方法的问题...求解
server:
private TcpListener listener;
private TcpClient client;
private Thread thread1;
private void buttonStart_Click(object sender, EventArgs e)
{
this.buttonStart.Enabled = false;
IPAddress ip = IPAddress.Parse(this.textBoxIP.Text);
Int32 port = Int32.Parse(this.textBoxPort.Text);
listener=new TcpListener(ip,port);
listener.Start(10);
client = listener.AcceptTcpClient();
if (client.Connected)
{
this.listBoxState.Items.Add("与客户" + client.Client.RemoteEndPoint.ToString() + "建立链接");
thread1 = new Thread(new ThreadStart(AcceptMessage));
thread1.Start();
}
}
private void AcceptMessage()
{
while (true)
{
try
{
NetworkStream netStream = client.GetStream();
byte[] buffer = new byte[1024];
int bytesRead = netStream.Read(buffer, 0, 1024);
string message = Encoding.Unicode.GetString(buffer, 0, bytesRead);
this.richTextBoxAccept.Rtf = message;
}
catch
{
this.listBoxState.Items.Add("与客户断开连接");
break;
}
}
}
private void buttonSend_Click(object sender, EventArgs e)
{
string message = this.richTextBoxSend.Rtf;
byte[] buffer =Encoding.Unicode.GetBytes(message);
try
{
NetworkStream netStream = client.GetStream();
netStream.Write(buffer, 0, buffer.Length);
this.richTextBoxSend.Text = "";
}
catch
{
MessageBox.Show("无法发送!");
}
} private void buttonStop_Click(object sender, EventArgs e)
{
this.buttonStart.Enabled = true;
try
{
listener.Stop();
listener = null;
if (client.Connected)
{
client.Close();
thread1.Abort();
}
this.listBoxState.Items.Add("停止监听");
}
catch
{
MessageBox.Show("监听尚未开始,关闭无效");
}
}
client:
private TcpClient client;
private Thread thread1;
private void buttonRequest_Click(object sender, EventArgs e)
{
IPAddress ip = IPAddress.Parse(this.textBoxIP.Text);
client = new TcpClient();
Int32 port = Int32.Parse(this.textBoxPort.Text);
try
{
client.Connect(ip, port);
}
catch
{
MessageBox.Show("与服务器连接失败");
}
this.buttonRequest.Enabled = false;
this.listBoxState.Items.Add("与服务器连接成功");
thread1 = new Thread(new ThreadStart(AcceptMessage));
thread1.Start(); }
private void AcceptMessage()
{
while (true)
{
try
{
NetworkStream netStream = client.GetStream();
byte[] buffer = new byte[1024];
int bytesRead = netStream.Read(buffer, 0, 1024);
string message = Encoding.Unicode.GetString(buffer, 0, bytesRead);
this.richTextBoxReceive.Rtf =message;
}
catch
{
this.listBoxState.Items.Add("与服务器断开连接");
break;
}
}
} private void buttonClose_Click(object sender, EventArgs e)
{
try
{
client.Close();
this.listBoxState.Items.Add("与主机断开连接");
thread1.Abort(); }
catch
{
MessageBox.Show("尚未与主机连接,断开无效!");
}
this.buttonRequest.Enabled = true; }
private void buttonSend_Click(object sender, EventArgs e)
{
string message = this.richTextBoxSend.Rtf;
byte[] buffer = Encoding.Unicode.GetBytes(message);
try
{
NetworkStream netStream = client.GetStream();
netStream.Write(buffer, 0, buffer.Length);
this.richTextBoxSend.Rtf = "";
}
catch
{
MessageBox.Show("无法发送!");
}
}