问题描述
今天看了些开发套接字服务器的教程,其中有些地方不太明白!代码如下privateIPAddressmyip=IPAddress.Parse("192.168.1.2");privateIPEndPointmyserver;privateSocketsock;privateboolcheck=true;privateSocketaccsock;publicForm1(){InitializeComponent();System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls=false;}privatevoidaccp(){myserver=newIPEndPoint(myip,Int32.Parse(this.textBox2.Text));sock=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);sock.Bind(myserver);sock.Listen(50);textBox3.AppendText("主机"+this.textBox1.Text+"端口"+this.textBox2.Text+"开始监听");accsock=sock.Accept();if(accsock.Connected){textBox4.AppendText("与客户端建立链接");while(check){Byte[]rec=newByte[64];NetworkStreamnetStream=newNetworkStream(accsock);netStream.Read(rec,0,rec.Length);stringrecmessage=System.Text.Encoding.BigEndianUnicode.GetString(rec);}}else{textBox5.AppendText("有点错误!");}}我想问下,诚心走到textBox3.AppendText("主机"+this.textBox1.Text+"端口"+this.textBox2.Text+"开始监听");这句正常,但是下面的accsock=sock.Accept();if(accsock.Connected){。。。。。}就不正常了,我想问1.accsock.Connected连接的是哪个主机??是客户端还是自己??2.还有accsock.Connected返回的应该是bool类型吧,但是无论是if还是else里面的大括号好像都不走,很是奇怪,因为我用了线程,打断点又看不出来,请高手指点!
解决方案
解决方案二:
1.accsock.Connected连接的是哪个主机??是客户端还是自己??服务器接收客户端连接2、bool.不走的原因是没有客户端连接过来
解决方案三:
1.客户端2.需要客户端连接过来,才走到该端点,否则accsock=sock.Accept();会一直等待有客户端连接过来。
解决方案四:
1、accsock.Connected不是连接谁,只是返回一个是否连接的状态,注意后缀ed,不是动词Connect,这里Connected是属性Connect是方法,其实上面一句Accept接受的是客户端的连接2、其实不是走到accsock.Connected这句,是走到了上一句accsock=sock.Accept();就停止了,在等待客户机的连接,客户机没有就一直在accsock=sock.Accept();这句等待
解决方案五:
嗯,也就是说必须有客户端发送数据,服务器端才能连接??那么也就是必须服务器端跟客户端同时运行才行是吧!
解决方案六:
是的,客户端没有连接时,sock.Accept()就导致线程阻塞了,所以,一般的,在调用sock.Accept()之前,需要先判断状态,看看是否需要Accept()例如:if(sock.Poll(50,SelectMode.SelectRead)){SocketnewSock=sock.Accept();if(sock.Connected){//该连接已建立,可以进行一些处理}}
解决方案七:
更正:if(sock.Poll(50,SelectMode.SelectRead)){SocketnewSock=sock.Accept();if(newSock.Connected)//此处更正了sock-->newSock{//新的连接已建立,可以进行一些处理}}
解决方案八:
晕,排版问题更正:if(sock.Poll(50,SelectMode.SelectRead)){SocketnewSock=sock.Accept();if(newSock.Connected)//此处更正了sock-->newSock{//新的连接已建立,可以进行一些处理}}