套接字服务器问题

问题描述

今天看了些开发套接字服务器的教程,其中有些地方不太明白!代码如下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{//新的连接已建立,可以进行一些处理}}

时间: 2025-01-20 21:20:35

套接字服务器问题的相关文章

使用异步服务器套接字编程指南(微软MSDN)

异步服务器套接字使用 .NET Framework 异步编程模型处理网络服务请求.Socket 类遵循标准 .NET Framework 异步命名模式:例如,同步 Accept 方法对应异步 BeginAccept 和 EndAccept 方法.异步服务器套接字需要一个开始接受网络连接请求的方法,一个处理连接请求并开始接收网络数据的回调方法以及一个结束接收数据的回调方法.本节将进一步讨论所有这些方法. 在下面的示例中,为开始接受网络连接请求,方法 StartListening 初始化 Socke

Linux下套接字详解(二)----套接字Socket

在前面我们讲了TCP/IP.TCP和UDP的一些基本知识,但是协议只有一套,而我们系统多个TCP连接或多个应用程序进程必须通过同一个 TCP协议端口传输数据.为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口. 套接口可以说是网络编程中一个非常重要的概念,linux以文件的形式实现套接口,与套接口相应的文件属于sockfs特殊文件系统,创建一个套接口就是在sockfs中创建一个特殊文件,并建立起为实现套接口功能的相关数据结构

基于多线程的客户端/服务器套接字类

这篇文章主要介绍如何设计基于多线程的客户端/服务器套接字(socket)类.开发者/设计者可以根据具体的 需要决定是否选用另外的线程.在网络上有许多其它的套接字类,但是没有一个能够向这个类一样为你的应用程序 提供回调功能(事件监测).本文设计的类能够为你提供如下的事件监测:完成建立链接.放弃链接.链接失败和 接收数据(包括0字节数据包). 描述: 本文提供一种新的,同时支持TCP和UDP通讯的套接字类,与你可能在本站或其它地方发现的套接字编程文章相 比,本文设计的类有很多优点.首先,这个类没有像

JAVA网络编程服务器多线程接受套接字,如何能使服务器的静态常量,与客户端的数据进行同步?

问题描述 JAVA网络编程服务器多线程接受套接字,如何能使服务器的静态常量,与客户端的数据进行同步? 服务器Server客户端CLientServer静态常量num创建服务器,ServerSocket的端口号为8000,连接套接字.每创建一个客户端,客户端就创建一个Socket,端口号为8000,与服务器进行连接,与此同时,客户端新建ServerSocket,端口号为3000+Server.num,连接套接字.服务器与客户端连接后,服务器新建子线程Handler.子线程Handler,新建Ser

Linux下套接字详解(九)---poll模式下的IO多路复用服务器

poll多路复用 poll的机制与select类似,与select在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是poll没有最大文件描述符数量的限制. poll和select同样存在一个缺点就是,包含大量文件描述符的数组被整体复制于用户态和内核的地址空间之间,而不论这些文件描述符是否就绪,它的开销随着文件描述符数量的增加而线性增大. poll编程模型 函数原型 函数格式如下所示: # include <poll.h> int poll ( struct pol

服务器-网络编程中并未建立连接的端口却能往套接字中写,发送数据,困惑

问题描述 网络编程中并未建立连接的端口却能往套接字中写,发送数据,困惑 拜托各位了,碰上一个难以理解的困惑 情况如下 我在qt中编写了一个客户端(抛开qt,也可以理解为别的写的),在这个应用程序中有一个对象是专门用来建立连接并且处理和服务器的相关的通信. 服务器的话是在linux下c写的,简单的可以看做这种模式accept等待连接,连接成功后阻塞读写 while(1) { clientfd = accept(lfd, null, null): printf("new connectn"

服务器80/21端口用telnet测试正常,但运行时提示“每个套接字地址只允许使用一次”错误。

问题描述 服务器80/21端口用telnet测试正常,但运行时提示"每个套接字地址只允许使用一次"错误. 用telnet测试万网提供的服务器80/21端口正常,但运行时提示"每个套接字地址只允许使用一次"错误.若把端口换为4567就能正常运行,但此端口没有开放.部分源代码如下 IPEndPoint localep = new IPEndPoint(IPAddress.Parse("121.42.134.161"), int.Parse("

服务器-linux下套接字的相关问题

问题描述 linux下套接字的相关问题 0.套接字是什么? 1.为什么我们在服务器建立一个套接字,不同的客户端发送消息接受消息,仍旧是从这个套接字上面接受呢? 2.这个套接字可以接受多少的连接呢?比如同时满足100个客户端同时发送消息 3.listen()函数的第二个参数到底是什么作用?如果我们同时有1000个连接,而listen的设定为5个监听连接,会怎么样呢? <小弟初学者,希望大家不要喷,恳切回答,多谢> 解决方案 0.套接字是网络编程的一个术语,是两端之间交互数据的接口. 1.服务器先

服务器-client.getstream(),报错不允许对非链接的套接字执行此操作

问题描述 client.getstream(),报错不允许对非链接的套接字执行此操作 这是用的函数,我没有开服务器端,只打开了客户端,点击按钮请求链接,因为没有开服务器,就会抛出异常,出现窗口"..连接服务器失败",但是他还是继续执行了 然后就有了这个报错,请问是怎么回事???