C# Socket 问题,在线等!!! ( 积分: 100 )

N

necyhk

Unregistered / Unconfirmed
GUEST, unregistred user!
我用C#做一下socket通讯程序,
做了一个socket服务器,处理客户端的连接,在C#中用什么方法知道有多少客户机连上了服务器,并且怎样知道那一个客户机与服务器断开了连接?
我在服务端写了程序,但我不知在服务端怎样判断某一客户与服务端断开了连接?
代码如下:
//开始监听
private void button1_Click(object sender, System.EventArgs e)
{
try
{
myIP=IPAddress.Parse (textBox1.Text);//把textBox1.Text输入的IP地址字符串转换为IPAddress格式;
}
catch
{
MessageBox.Show ("您输入的IP地址格式不正确!");
}
try
{
Thread thread=new Thread (new ThreadStart (accp));
//生成监听线程;
thread.Start ();
}
catch(Exception ee)
{
listBox1.Items.Add (ee.Message) ;
}
}

private void accp()
{
MyServer=new IPEndPoint (myIP,Int32.Parse (textBox2.Text));//组合将访问主机的IP地址和端口号。
sock=new Socket (AddressFamily.InterNetwork ,SocketType.Stream ,ProtocolType.Tcp );//实例化Socket对象。
sock.Bind(MyServer);//绑定将访问的主机。
sock.Listen(50);//开始监听,最大包长50。
listBox1.Items.Add ("主机"+textBox1.Text +"端口"+textBox2.Text +"开始监听....../r/n");
while(true)
{
accsock=sock.Accept ();//接收客户端的服务请求。

if(accsock.Connected) /////////////////
{
listBox1.Items.Add ("与客户建立连接。");
Thread thread=new Thread (new ThreadStart (round));//如果有客户请求,生成与客户通信的线程。
thread.Start ();
}
}
}
private void round()
{
while(true)
{
Byte[] Rec=new byte [64];
NetworkStream netstream=new NetworkStream (accsock);
netstream.Read (Rec,0,Rec.Length );//读取客户发送来的信息。
string RecMessage=System.Text .Encoding .BigEndianUnicode .GetString (Rec);
richTextBox1.AppendText(string.Format((DateTime.Now).ToString(), "yyyy-mm-dd hh:mm:ss") + "/r/n");
richTextBox1.AppendText (RecMessage+"/r/n");//写入到接收信息栏中。
}
}
 
F

fl9295

Unregistered / Unconfirmed
GUEST, unregistred user!
服务器端的Socket应用最好指定一下,连接最时与发送超时.
可以考虑在线程开始与线程结束进行计数.线程开始后加一,退出后减一.
个人感觉用异步Socket连接通讯更适合,当客户机请求时,委托一个Socket与客户机建立连接;
 
H

hxqiang2000

Unregistered / Unconfirmed
GUEST, unregistred user!
顶!.再学习中....
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
633
import
I
S
回复
0
查看
813
SUNSTONE的Delphi笔记
S
I
回复
0
查看
809
import
I
顶部