http://vod.km2000.com/xxxx/socket.rar
1:程序关闭不了。
2:服务端与多客户端,不知道服务端怎么指定与其中某个连接通信。
3:服务端怎么给全部客户端通信。
各位大哥,小弟菜,代码在上面,麻烦各位大哥帮忙改正帖出来或者发到我邮件里[email protected]
非常感谢!!!
1:程序关闭不了。
2:服务端与多客户端,不知道服务端怎么指定与其中某个连接通信。
3:服务端怎么给全部客户端通信。
各位大哥,小弟菜,代码在上面,麻烦各位大哥帮忙改正帖出来或者发到我邮件里[email protected]
非常感谢!!!
应先定义 private Thread pThread;
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
try
{
if(pThread!=null)
if(pThread.IsAlive)
pThread.Abort();
sk.Close();
}
catch{}
}
关闭程序的时候线程没关
一会我机器的CPU就彪到100%
================================================================
此帖通过csdn小助手回复。
CSDN小助手是使用vb.net编写的CSDN论坛脱机“外挂”,她能够在
脱离IE的情况下使用Csdn论坛。程序只加载最核心的数据,所以显示更
快,产生的流量更小。 下载地址:http://qqwwee.com/csdn.rar
================================================================
---------------------
把代码贴出来,看看哪里错了2、服务端与多客户端,不知道服务端怎么指定与其中某个连接通信。
------------------------------
通过Accept方法返回的socket已经是点对点连接了,这是服务端已经已具体客户端连接(TCP方式)3:服务端怎么给全部客户端通信。
---------------------------------
记录所有客户端的ip,端口,一一请求连接(tcp),或广播(udp)
打不开
{
while(true)
{
try
{
k=sk.Accept();
this.listBox2.Items.Add(k.RemoteEndPoint.ToString());
Thread pThread = new Thread(new ThreadStart(receive));
pThread.Start();
}
catch{}
}
}关键这里
k=sk.Accept();
this.listBox2.Items.Add(k.RemoteEndPoint.ToString());
你为什么不把k放在数组里呢,让k数组和listBox2的对应起来,这样一个客户端就一个socket链接,对要说话的客户端交流就用特定的链接不就OK呢。你的问题错在,k是可变的,当客户端A链接时,k负责和A链接,B链接是,k负责和B链接,和A负责链接的线掉了。
private void start()
{
IPAddress ip=getip();
IPEndPoint xx=new IPEndPoint(ip,338);
sk=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
byte[] by=new byte[100];
sk.Bind(xx);
sk.Listen(10);
Thread pThread = new Thread(new ThreadStart(accept));
pThread.Start();
} private void accept()
{
while(true)
{
try
{
k=sk.Accept();
this.listBox2.Items.Add(k.RemoteEndPoint.ToString());
Thread pThread = new Thread(new ThreadStart(receive));
pThread.Start();
}
catch{}
}
} private void receive()
{
while(true)
{
byte[] by=new byte[1024];
k.Receive(by);
string a=System.Text.Encoding.Default.GetString(by);
this.listBox1.Items.Add(a);
}
}
private void accept()
{
while(true)
{
try
{
k=sk.Accept();
this.listBox2.Items.Add(k.RemoteEndPoint.ToString());
Thread pThread = new Thread(new ThreadStart(receive));
pThread.Start();
}
catch{}
}
}还有这个
private void receive()
{
while(true)
{
byte[] by=new byte[1024];
k.Receive(by);
string a=System.Text.Encoding.Default.GetString(by);
this.listBox1.Items.Add(a);
}
}
参考这个
http://blog.csdn.net/zhiang75/archive/2004/08/16/75915.aspx