c# socket通信问题

Ami121 2010-03-31 08:57:03
应用需要,想用c#想实现一个简单的窗体,通过按钮触发事件发送数据,然后将从java客户端接收到的数据显示在窗体的richtextbox 中,能正常接受数据,一旦循环接受数据显示时,整个窗体就处于死机状态。????不知道怎么解决这个问题?

public partial class Form1 : Form
{
private Socket client = null;
delegate void ThreadMethod(object obj);
ThreadMethod _tm = null;

private void Form1_Load(object sender, EventArgs e)
{

}

private void button1_Click(object sender, EventArgs e)
{

//程序启动时便与远程进行连接
client = Connect("192.168.1.55", 9111);
try
{
if (client.Connected)
{
byte[] sends = Encoding.Default.GetBytes(this.textBox1.Text);
byte[] byteConvet = new byte[23];
byteConvet[0] = 0;
byteConvet[1] = 0x15;
for (int i = 2; i < 23; i++) {
byteConvet[i] = sends[i - 2];
}
client.Send(byteConvet);
string recvStr="";

byte[] recvBytes=new byte[1024];
int bytes=0;

while(true) {
bytes = client.Receive(recvBytes, recvBytes.Length, 0);
//将读取的字节数转换为字符串
recvStr += Encoding.UTF8.GetString(recvBytes, 2, bytes-2);
_tm = Show;
_tm(recvStr);


}
}
}
catch {
}
}
private Socket Connect(string ip, int port)
{
IPAddress ipa = IPAddress.Parse(ip);
IPEndPoint ipe = new IPEndPoint(ipa, port);
Socket sender = new Socket(
AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
sender.Connect(ipe);
}
catch
{
return null;
}
return sender;
}
private void Show(object obj)
{
if (!this.richTextBox1.InvokeRequired)
{
this.richTextBox1.Invoke(new EventHandler(ControlDelegate),
new object[] { obj, EventArgs.Empty });
}
}
private void ControlDelegate(object sender, EventArgs e)
{
this.richTextBox1.Text = sender.ToString();
}
public Form1()
{
InitializeComponent();
}

}


感觉问题的所在就在while 循环的地方,socket线程一直在占用主窗体的线程。

请教解决办法。。。。
...全文
144 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ami121 2010-04-01
  • 打赏
  • 举报
回复
来者有分
ZSW53362465 2010-03-31
  • 打赏
  • 举报
回复
while(true) {
bytes = client.Receive(recvBytes, recvBytes.Length, 0);
//将读取的字节数转换为字符串
recvStr += Encoding.UTF8.GetString(recvBytes, 2, bytes-2);
_tm = Show;
_tm(recvStr);


}
要么新开一个线程把这个WHILE放进去,要么用client.BeginRecive这个方法
jieon 2010-03-31
  • 打赏
  • 举报
回复
把button1_Click这事件中的方法独立出来,然后线程启动
老纪@ToB Dev 2010-03-31
  • 打赏
  • 举报
回复
多线程或者是异步
我最近也在做SOCKET的东东
可以交流下
Ami121 2010-03-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mervyn807 的回复:]
多线程吧
不要让监听线程占用UI界面的主线程
[/Quote]
指点指点
缭绕飘渺 2010-03-31
  • 打赏
  • 举报
回复
多线程吧
不要让监听线程占用UI界面的主线程
平生我自如 2010-03-31
  • 打赏
  • 举报
回复
没做过 帮顶一下~~~~~~~~~~

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧