WinForm, VS2005,
TCP/IP现在需要做:一个服务端,多个客户端的程序。
现在只会用多线程来实现:在服务器上事先对每一个客户端采用不同的端口,开一个线程,对其侦听和回复。我想肯定有更好的处理方法。从网上查到过:
“建立一个服务端口,称为控制端口,客户端通过先于这个端口进行信息交换。”
没有看懂。
TCP/IP现在需要做:一个服务端,多个客户端的程序。
现在只会用多线程来实现:在服务器上事先对每一个客户端采用不同的端口,开一个线程,对其侦听和回复。我想肯定有更好的处理方法。从网上查到过:
“建立一个服务端口,称为控制端口,客户端通过先于这个端口进行信息交换。”
没有看懂。
this.Invoke(new AddListItemHandler(this.AddListItem), new string[] { recString }); AddListItemHandler应该怎么申明?我没有用过delegate,谢谢。
?
请问:
this.Invoke(new AddListItemHandler(this.AddListItem), new string[] { recString });AddListItemHandler应该怎么申明?我没有用过delegate,谢谢。-------------------------------------
呵呵………………
真不好意思,这句和Socket是无关的。只是我用来将接收到的数据显示到窗体的ListBox里面!
你可以用你自己的处理函数来替换掉这几行代码!
不用托管时,出现了跨线程使用控件的异常。还得用托管阿。
不知您能否提供更详细一点的说明,让我能用起来下面这条语句。非常感谢。
this.Invoke(new AddListItemHandler(this.AddListItem), new string[] { recString });
public delegate void AddListItemHandler(string value);-------------------------------------------------------------这个是我要调用的方法!
priv void AddListItem(string value)
{
this.ListBox1.Item.Add(value);
}
string recString = "来自客户端" + remoEP.Address.ToString() + "的消息:" + Encoding.Default.GetString(buffer, 0, receiveCount);
执行这条语句时,并没有把buffer的内容转化为string.
"\02\00\00\07\0-\06\0-\01\03\0 \01\00\0:\03\01\0:\02\09\0S\0y\0s\0t\0e\0m\0.\0W\0i\0n\0d\0o\0w\0s\0.\0F\0o\0r\0m\0s\0.\0R\0i\0c\0h\0T\0e\0x\0t\0B\0o\0x\0,\0 \0T\0e\0x\0t\0:\0 \01\02\03\04\05\06\0\r\0\n"但是,自动返回客户端的信息完全正确。
终于全调通了。解码用如下的语句就好了:
string msg = System.Text.Encoding.BigEndianUnicode.GetString(buffer);