A. 如何查看服务器的TCP/IP连接状况
B. 怎么能看到公司网络端口是不是被禁用了
开始---运行---输入CMD,进去DOS后输入netstat -an会显示端口使用情况,TCP表示面向连接的服务,UDP表示面向无连接的服务,每个服务对应的有服务内容和端口号以及端口状态,LISTENNING表示监听,ESTABLISHED表示已经建立连接,TIME WAIT表示超时,一般IE浏览器使用80端口,但是作为一般网名很难从端口使用情况看出网络使用情况,因为对服务的描述不是很详细,而且一般的防火墙和杀毒软件以及其他和网络有连接的软件都使用很多的不连续的端口,查看端口还能甄别一些木马程序,因为一般的木马都会使用一些不常用的端口,而大部分的同种木马又经常使用同一个端口提供服务.所以说即使你能够查看端口,你看过以后仍会让你一头雾水.最保险的方法是给网络运营商打电话,他们会派一个网络安装人员解决你的问题,时间决定于当地网络运营商的服务质量和服务效率.下面给你列举几个网络掉线的几个常见原因
1.网络服务器有问题,包括运营商服务器出现问题(几率很小,但偶尔也发生),小区服务器出现问题.出现这样的问题一般你不事先给网络运营商打电话你会很吃亏的,你花了很多的时间去找自己电脑的原因结果发现是他们出了问题你是不是很气愤?不一定人家弄好了,你自己把电脑搞坏就不好了.
2.布线有问题,一般家庭宽带接入都是通过电话线接分离器,分离器分出俩根线,一根接电话,一根接猫,但是如果你在分离器前端接了另一部电话的话,那个电话在接听和拨打的时候都会引起掉线,解决办法是把电话接到分离器以后的线路上.
3.猫有问题,包括猫自身有问题,换个猫就行了,掉线的另一个原因是猫的驱动没装对,有驱动的猫一般的协议有很多,使用不当的话就会掉线,当然他也能上网,但是不稳定.
4.中了病毒,一些病毒会导致掉线
掉线的情况多种多样,最好先找网络运营商
C. 求教服务器tcp连接数被占满的有关问题
我问了在约APP的专家,修改上述限制的最简单的办法就是使用ulimit命令:
[speng@as4 ~]$ ulimit -n
上述命令中,在中指定要设置的单一进程允许打开的最大文件数。如果系统回显类似于“Operation notpermitted”之类的话,说明上述限制修改失败,实际上是因为在中指定的数值超过了Linux系统对该用户打开文件数的软限制或硬限制。因此,就需要修改Linux系统对用户的关于打开文件数的软限制和硬限制。
第一步,修改/etc/security/limits.conf文件,在文件中添加如下行:
speng soft nofile 10240
speng hard nofile 10240
其中speng指定了要修改哪个用户的打开文件数限制,可用’*'号表示修改所有用户的限制;soft或hard指定要修改软限制还是硬限制;10240则指定了想要修改的新的限制值,即最大打开文件数(请注意软限制值要小于或等于硬限制)。修改完后保存文件。
第二步,修改/etc/pam.d/login文件,在文件中添加如下行:
session required /lib/security/pam_limits.so
这是告诉Linux在用户完成系统登录后,应该调用pam_limits.so模块来设置系统对该用户可使用的各种资源数量的最大限制(包括用户可打开的最大文件数限制),而pam_limits.so模块就会从/etc/security/limits.conf文件中读取配置来设置这些限制值。修改完后保存此文件。
第三步,查看Linux系统级的最大打开文件数限制,使用如下命令:
[speng@as4 ~]$ cat /proc/sys/fs/file-max
12158
这表明这台Linux系统最多允许同时打开(即包含所有用户打开文件数总和)12158个文件,是Linux系统级硬限制,所有用户级的打开文件数限制都不应超过这个数值。通常这个系统级硬限制是Linux系统在启动时根据系统硬件资源状况计算出来的最佳的最大同时打开文件数限制,如果没有特殊需要,不应该修改此限制,除非想为用户级打开文件数限制设置超过此限制的值。修改此硬限制的方法是修改/etc/rc.local脚本,在脚本中添加如下行:
echo 22158 > /proc/sys/fs/file-max
这是让Linux在启动完成后强行将系统级打开文件数硬限制设置为22158。修改完后保存此文件。
完成上述步骤后重启系统,一般情况下就可以将Linux系统对指定用户的单一进程允许同时打开的最大文件数限制设为指定的数值。如果重启后用 ulimit-n命令查看用户可打开文件数限制仍然低于上述步骤中设置的最大值,这可能是因为在用户登录脚本/etc/profile中使用ulimit -n命令已经将用户可同时打开的文件数做了限制。由于通过ulimit-n修改系统对用户可同时打开文件的最大数限制时,新修改的值只能小于或等于上次 ulimit-n设置的值,因此想用此命令增大这个限制值是不可能的。所以,如果有上述问题存在,就只能去打开/etc/profile脚本文件,在文件中查找是否使用了ulimit-n限制了用户可同时打开的最大文件数量,如果找到,则删除这行命令,或者将其设置的值改为合适的值,然后保存文件,用户退出并重新登录系统即可。
通过上述步骤,就为支持高并发TCP连接处理的通讯处理程序解除关于打开文件数量方面的系统限制。
2、修改网络内核对TCP连接的有关限制(参考对比下篇文章“优化内核参数”)
在Linux上编写支持高并发TCP连接的客户端通讯处理程序时,有时会发现尽管已经解除了系统对用户同时打开文件数的限制,但仍会出现并发TCP连接数增加到一定数量时,再也无法成功建立新的TCP连接的现象。出现这种现在的原因有多种。
第一种原因可能是因为Linux网络内核对本地端口号范围有限制。此时,进一步分析为什么无法建立TCP连接,会发现问题出在connect()调用返回失败,查看系统错误提示消息是“Can’t assign requestedaddress”。同时,如果在此时用tcpmp工具监视网络,会发现根本没有TCP连接时客户端发SYN包的网络流量。这些情况说明问题在于本地Linux系统内核中有限制。其实,问题的根本原因在于Linux内核的TCP/IP协议实现模块对系统中所有的客户端TCP连接对应的本地端口号的范围进行了限制(例如,内核限制本地端口号的范围为1024~32768之间)。当系统中某一时刻同时存在太多的TCP客户端连接时,由于每个TCP客户端连接都要占用一个唯一的本地端口号(此端口号在系统的本地端口号范围限制中),如果现有的TCP客户端连接已将所有的本地端口号占满,则此时就无法为新的TCP客户端连接分配一个本地端口号了,因此系统会在这种情况下在connect()调用中返回失败,并将错误提示消息设为“Can’t assignrequested address”。有关这些控制逻辑可以查看Linux内核源代码,以linux2.6内核为例,可以查看tcp_ipv4.c文件中如下函数:
static int tcp_v4_hash_connect(struct sock *sk)
请注意上述函数中对变量sysctl_local_port_range的访问控制。变量sysctl_local_port_range的初始化则是在tcp.c文件中的如下函数中设置:
void __init tcp_init(void)
内核编译时默认设置的本地端口号范围可能太小,因此需要修改此本地端口范围限制。
第一步,修改/etc/sysctl.conf文件,在文件中添加如下行:
net.ipv4.ip_local_port_range = 1024 65000
这表明将系统对本地端口范围限制设置为1024~65000之间。请注意,本地端口范围的最小值必须大于或等于1024;而端口范围的最大值则应小于或等于65535。修改完后保存此文件。
第二步,执行sysctl命令:
[speng@as4 ~]$ sysctl -p
如果系统没有错误提示,就表明新的本地端口范围设置成功。如果按上述端口范围进行设置,则理论上单独一个进程最多可以同时建立60000多个TCP客户端连接。
第二种无法建立TCP连接的原因可能是因为Linux网络内核的IP_TABLE防火墙对最大跟踪的TCP连接数有限制。此时程序会表现为在 connect()调用中阻塞,如同死机,如果用tcpmp工具监视网络,也会发现根本没有TCP连接时客户端发SYN包的网络流量。由于 IP_TABLE防火墙在内核中会对每个TCP连接的状态进行跟踪,跟踪信息将会放在位于内核内存中的conntrackdatabase中,这个数据库的大小有限,当系统中存在过多的TCP连接时,数据库容量不足,IP_TABLE无法为新的TCP连接建立跟踪信息,于是表现为在connect()调用中阻塞。此时就必须修改内核对最大跟踪的TCP连接数的限制,方法同修改内核对本地端口号范围的限制是类似的:
第一步,修改/etc/sysctl.conf文件,在文件中添加如下行:
net.ipv4.ip_conntrack_max = 10240
这表明将系统对最大跟踪的TCP连接数限制设置为10240。请注意,此限制值要尽量小,以节省对内核内存的占用。
第二步,执行sysctl命令:
[speng@as4 ~]$ sysctl -p
如果系统没有错误提示,就表明系统对新的最大跟踪的TCP连接数限制修改成功。如果按上述参数进行设置,则理论上单独一个进程最多可以同时建立10000多个TCP客户端连接。
3、使用支持高并发网络I/O的编程技术
在Linux上编写高并发TCP连接应用程序时,必须使用合适的网络I/O技术和I/O事件分派机制。
可用的I/O技术有同步I/O,非阻塞式同步I/O(也称反应式I/O),以及异步I/O。在高TCP并发的情形下,如果使用同步I/O,这会严重阻塞程序的运转,除非为每个TCP连接的I/O创建一个线程。但是,过多的线程又会因系统对线程的调度造成巨大开销。因此,在高TCP并发的情形下使用同步 I/O是不可取的,这时可以考虑使用非阻塞式同步I/O或异步I/O。非阻塞式同步I/O的技术包括使用select(),poll(),epoll等机制。异步I/O的技术就是使用AIO。
从I/O事件分派机制来看,使用select()是不合适的,因为它所支持的并发连接数有限(通常在1024个以内)。如果考虑性能,poll()也是不合适的,尽管它可以支持的较高的TCP并发数,但是由于其采用“轮询”机制,当并发数较高时,其运行效率相当低,并可能存在I/O事件分派不均,导致部分TCP连接上的I/O出现“饥饿”现象。而如果使用epoll或AIO,则没有上述问题(早期Linux内核的AIO技术实现是通过在内核中为每个 I/O请求创建一个线程来实现的,这种实现机制在高并发TCP连接的情形下使用其实也有严重的性能问题。但在最新的Linux内核中,AIO的实现已经得到改进)。
综上所述,在开发支持高并发TCP连接的Linux应用程序时,应尽量使用epoll或AIO技术来实现并发的TCP连接上的I/O控制,这将为提升程序对高并发TCP连接的支持提供有效的I/O保证。
内核参数sysctl.conf的优化
/etc/sysctl.conf 是用来控制linux网络的配置文件,对于依赖网络的程序(如web服务器和cache服务器)非常重要,RHEL默认提供的最好调整。
推荐配置(把原/etc/sysctl.conf内容清掉,把下面内容复制进去):
net.ipv4.ip_local_port_range = 1024 65536
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_window_scaling = 0
net.ipv4.tcp_sack = 0
net.core.netdev_max_backlog = 30000
net.ipv4.tcp_no_metrics_save=1
net.core.somaxconn = 262144
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
这个配置参考于cache服务器varnish的推荐配置和SunOne 服务器系统优化的推荐配置。
varnish调优推荐配置的地址为:http://varnish.projects.linpro.no/wiki/Performance
不过varnish推荐的配置是有问题的,实际运行表明“net.ipv4.tcp_fin_timeout = 3”的配置会导致页面经常打不开;并且当网友使用的是IE6浏览器时,访问网站一段时间后,所有网页都会打不开,重启浏览器后正常。可能是国外的网速快吧,我们国情决定需要调整“net.ipv4.tcp_fin_timeout = 10”,在10s的情况下,一切正常(实际运行结论)。
修改完毕后,执行:
/sbin/sysctl -p /etc/sysctl.conf
/sbin/sysctl -w net.ipv4.route.flush=1
命令生效。为了保险起见,也可以reboot系统。
调整文件数:
linux系统优化完网络必须调高系统允许打开的文件数才能支持大的并发,默认1024是远远不够的。
执行命令:
Shell代码
echo ulimit -HSn 65536 >> /etc/rc.local
echo ulimit -HSn 65536 >>/root/.bash_profile
ulimit -HSn 65536
D. 阿里云服务器对 tcp 并发做了限制么
主要还得看带宽
1.cpu
2.内存
3.带宽
4.tcp连接数
你可以看看上面四个在达到高峰时候的变化,明显的就是哪个
E. 怎样知道服务器是不是限制了流量
这样讲吧,如果是一条只有两米宽的公路过一辆车可能没问题吧!但过两辆经过,那是不是会出现问题呢?如果是一条二十米宽的高速路,那可能在这上面通过多少辆车呢?网络就像公路一样,你租用的服务器好一点,流量有保障,如果你的服务器性能差,那自然流量大了就会出现拥挤的情况啦。
对于Windows下ping指令相信大家已经再熟悉不过了,但是能把ping的功能发挥到最大的人却并不是很多,当然我也并不是说我可以让ping发挥最大的功能,我也只不过经常用ping这个工具,也总结了一些小经验,现在和大家分享一下。
现在我就参照ping指令的辅助说明来给大家讲我使用ping时会用到的技巧,ping只有在安装了TCP/IP通讯协定以后才可以使用:
ping [-t] [-a] [-n count] [-l length] [-f] [-i ttl] [-v tos] [-r count] [-s count] [[-j computer-list] | [-k computer-list]] [-w timeout] destination-list
Options:
-t Ping the specified host until stopped.To see statistics and continue - type Control-Break;To stop - type Control-C.
不停的ping地方主机,直到你按下Control-C。
此功能?有什么特别的技巧,不过可以配合其他参数使用,将在下面提到。
-a Resolve addresses to hostnames.
解析电脑NetBios名。
例:C:\>ping -a 192.168.1.21
Pinging iceblood.yofor.com [192.168.1.21] with 32 bytes of data:
Reply from 192.168.1.21: bytes=32 time<10ms TTL=254
Reply from 192.168.1.21: bytes=32 time<10ms TTL=254
Reply from 192.168.1.21: bytes=32 time<10ms TTL=254
Reply from 192.168.1.21: bytes=32 time<10ms TTL=254
Ping statistics for 192.168.1.21:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
从上面就可以知道IP为192.168.1.21的电脑NetBios名为iceblood.yofor.com。
-n count Number of echo requests to send.
发送count指定的Echo数据包数。
在默认情况下,一般都只发送四个数据包,通过这个命令可以自己定义发送的个数,对衡量网路速度很有帮助,比如我想测试发送50个数据包的返回的平均时间为多少,最快时间为多少,最慢时间为多少就可以通过以下?知:
C:\>ping -n 50 202.103.96.68
Pinging 202.103.96.68 with 32 bytes of data:
Reply from 202.103.96.68: bytes=32 time=50ms TTL=241
Reply from 202.103.96.68: bytes=32 time=50ms TTL=241
Reply from 202.103.96.68: bytes=32 time=50ms TTL=241
Request timed out.
………………
Reply from 202.103.96.68: bytes=32 time=50ms TTL=241
Reply from 202.103.96.68: bytes=32 time=50ms TTL=241
Ping statistics for 202.103.96.68:
Packets: Sent = 50, Received = 48, Lost = 2 (4% loss),Approximate round trip times in milli-seconds:
Minimum = 40ms, Maximum = 51ms, Average = 46ms
从以上我就可以知道在给202.103.96.68发送50个数据包的过程当中,返回了48个,其中有两个由于未知原因丢失,这48个数据包当中返回速度最快为40ms,最慢为51ms,平均速度为46ms。
-l size Send buffer size.
定义echo数据包大小。
在默认的情况下windows的ping发送的数据包大小为32byt,我们也可以自己定义它的大小,但有一个大小的限制,就是最大只能发送65500byt,也许有人会问为什么要限制到65500byt,因为Windows系列的系统都有一个安全漏 洞(也许还包括其他系统)就是当向对方一次发送的数据包大于或等于65532时,对方就很有可能当机,所以微软公司为了解决这一安全漏洞于是限制了ping的数据包大小。虽然微软公司已经做了此限制,但这个参数配合其他参数以后危害依然非常强大,比如我们 就可以通过配合-t参数来实现一个带有攻击性的指令:(以下介绍带有危险性,只用于试验,请勿轻易施于别人电脑上,否则后果自负)
C:\>ping -l 65500 -t 192.168.1.21
Pinging 192.168.1.21 with 65500 bytes of data:
Reply from 192.168.1.21: bytes=65500 time<10ms TTL=254
Reply from 192.168.1.21: bytes=65500 time<10ms TTL=254
………………
这样它就会不停的向192.168.1.21电脑发送大小为65500byt的数据包,如果你只有一台电脑也许?有什么效果,但如果有很多台电脑那么就可以使对方完全瘫痪,我曾经就做过这样的试验,当我同时使用10台以上电脑ping一台Win200 0Pro系统的电脑时,不到5分钟对方的网路就已经完全瘫痪,网路严重堵塞,HTTP和FTP服务完全停止,由此可见威力非同小可。
-f Set Don't Fragment flag in packet.
在数据包中发送“不要分段”标志。
在一般你所发送的数据包都会通过路由分段再发送给对方,加上此参数以后路由就不会再分段处理。
-i TTL Time To Live.
指定TTL值在对方的系统里停留的时间。
此参数同样是帮助你检查网路运转情况的。
-v TOS Type Of Service.
将“服务类型”字段设置为tos指定的值。
-r count Record route for count hops.
在“记录路由”字段中记录伝出和返回数据包的路由。
在一般情况下你发送的数据包是通过一个个路由才到达对方的,但到底是经过了哪些路由呢?通过此参数就可以设定你想探测经过的路由的个数,不过限制在了9个,也就是说你只能跟踪到9个路由,如果想探测更多,可以通过其他命令实现,我将在以后的文章中给大 家讲解。以下为筥例:
C:\>ping -n 1 -r 9 202.96.105.101(发送一个数据包,最多记录9个路由)
Pinging 202.96.105.101 with 32 bytes of data:
Reply from 202.96.105.101: bytes=32 time=10ms TTL=249
Route: 202.107.208.187 ->
202.107.210.214 ->
61.153.112.70 ->
61.153.112.89 ->
202.96.105.149 ->
202.96.105.97 ->
202.96.105.101 ->
202.96.105.150 ->
61.153.112.90
Ping statistics for 202.96.105.101:
Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 10ms, Maximum = 10ms, Average = 10ms
从上面我就可以知道从我的电脑到202.96.105.101一共通过了202.107.208.187,202.107.210.214 , 61.153.112.70 , 61.153.112.89 , 202.96.105.149 , 202.96.105.97这几个路由。
-s count Timestamp for count hops.
指定count指定的跳点数的时间戳。
此参数和-r差不多,只是这个参数不记录数据包返回所经过的路由,最多也只记录4个。
-j host-list Loose source route along host-list.
利用computer-list指定的电脑列表路由数据包。连续电脑可以被中间关网?分隔(路由稀疏源)IP允许的最大?量为9。
-k host-list Strict source route along host-list.
利用computer-list指定的电脑列表路由数据包。连续电脑不能被中间网?分隔(路由?格源)IP允许的最大数量为9。
-w timeout Timeout in milliseconds to wait for each reply.
指定超时间隔,单位为毫秒。
此参数有什么其他技巧。
ping指令的其他技巧:在一般情况下还可以通过ping对方让对方返回给你的TTL值大小,粗略的判断目标主机的系统类型是Windows系列还是UNIX/Linux系列,一般情况下Windows系列的系统返回的TTL值在100-130之间,而UNIX/Linux系列的系统返回的TTL值在240-255之间,当然TTL的值在对方的主机里是可以修改的,Windows系列的系?可以通过修改注?表以下键值实现:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"DefaultTTL"=dword:000000ff
255---FF
128---80
64----40
32----20
F. 如何使用ping和telnet命令确认一台服务器是否在线和tcp端口是否开放
Telnet是Internet的远程登录协议的意思,它让你坐在自己的计算机前通过Internet网络登录到另一台远程计算机上,这台计算机可以在隔壁的房间里,也可以在地球的另一端。当你登录上远程计算机后,你的电脑就仿佛是远程计算机的一个终端,你就可以用自己的计算机直接操纵远程计算机,享受远程计算机本地终端同样的权力。你可在远程计算机启动一个交互式程序,可以检索远程计算机的某个数据库,可以利用远程计算机强大的运算能力对某个方程式求解。
但现在Telnet已经越用越少了。主要有如下三方面原因:
第一,个人计算机的性能越来越强,致使在别人的计算机中运行程序要求逐渐减弱。
第二,Telnet服务器的安全性欠佳,因为它允许他人访问其操作系统和文件。
第三,Telnet使用起来不是很容易,特别是对初学者。
但是Telnet仍然有很多优点,比如如果你的电脑中缺少什么功能,就可以利用Telnet连接到远程计算机上,利用远程计算机上的功能来完成你要做的工作,可以这么说,Internet上所提供的所有服务,通过Telnet都可以使用。
不过Telnet的主要用途还是使用远程计算机上所拥有的信息资源,如果你的主要目的是在本地计算机与远程计算机之间传递文件,则使用FTP会有效得多。
4.2 Telnet的工作原理
当你用Telnet登录进入远程计算机系统时,你事实上启动了两个程序,一个叫Telnet客户程序,它运行在你的本地机上,另一个叫Telnet服务器程序,它运行在你要登录的远程计算机上,本地机上的客户程序要完成如下功能:
1) 建立与服务器的TCP联接。
2) 从键盘上接收你输入的字符。
3) 把你输入的字符串变成标准格式并送给远程服务器。
4) 从远程服务器接收输出的信息。
5) 把该信息显示在你的屏幕上。
远程计算机的“服务”程序通常被称为“精灵”,它平时不声不响地候在远程计算机上,一接到你的请求,它马上活跃起来,并完成如下功能:
1) 通知你的计算机,远程计算机已经准备好了。
2) 等候你输入命令。
3) 对你的命令作出反应(如显示目录内容,或执行某个程序等)。
4) 把执行命令的结果送回给你的计算机。
5) 重新等候你的命令。
在Internet中,很多服务都采取这样一种客户/服务器结构。对Internet的使用者来讲,通常只要了解客户端的程序就够了。
4.3利用Windows95实现远程登录
Windows95的Telnet客户程序是属于Windows95的命令行程序中的一种。在安装Microsoft TCP/IP时,Telnet客户程序会被自动安装到系统上。
利用Windows95的Telnet客户程序进行远程登录,步骤如下:
(1) 联接到Internet.
(2) 选择“开始”菜单中的“运行”,或者是选择“程序”菜单下的“MS-DOS提示方式”便可转换至命令提示符下。
(3) 在命令提示符下,按下列两种方法中的任一种与Telnet联接。
一种方法是,输入“telnet”命令、空格以及相应的telnet的主机地址。如果主机提示你输入一个端口号,则可在主机地址后加上一个空格,再紧跟上相应的端口号。然后,按回车键。
另一种方法是,输入“telnet”命令并按回车,打开Telnet主窗口。在该窗口中,选择“连接”下的“远程系统”,如有必要,可以在随后出现的对话框中输入主机名和端口号,然后,单击“连接”按钮。
(4) 与Telnet的远程主机联接成功后,计算机会提示你输入用户名和密码,若联接的是一个BBS、Archie、Gopher等免费服务系统,则可以通过输入bbs、archie或gopher作为用户名,就可以进入远程主机系统。
这样,Telnet已经为你架起了通向远程主机的桥梁,现在你可以完全依照远程主机的命令行事了。
G. 如何检测TCP连接是否成功,或者已经连接成功
这个啊,我简单的说一下。
首先,编程的话,在windows环境下,肯定用的是winsock来编写网络程序。
如何检测客户端和服务端连接成功
肯定是用服务端首先bind,在listen,然后调用个循环accept,当客户端connect的时候,就开一个线程来服务。accept能返回一个sock值,而不是invaid_socket,那肯定就代表连接成功的啦。
断线处理
断线的话,必须得有一段send数据后,发现没有返回,那么程序就知道断线了。至于如何检测,可以设置一定的时间间隔,发送检测数据包,没有断线的话,有返回值,可以发送,断线的话,程序就知道了。
具体的编程和思路,你还是找本书看吧,不知道你用的什么语言编写的,不过估计在windows环境下都差不多。可以看下老罗的《windows环境下32位汇编语言程序设计》里面有个聊天室的案例,讲的蛮清楚的。虽然是汇编的,但是都是相通的,你应该看得懂。
H. 如何快速有效地判断一个TCP连接是否还有效
tcp连接是自维护的,一旦建立;
命令行方式如楼下所说,可以查看其生、死、活着三种状态,多个阶段;
I. Win10系统被限制了TCP/IP连接数怎么解决
方法/步骤1
造成网络无连接或受限制连接的原因是,路由DHCP服务未能启用,在这种情况下,打开"控制面板",选择"网络连接"(xp),"网络和共享中心”(win7或VISTA)"中找到"本地连接或者无线网络连接",点"击属性",在常规选项卡中选择internet协议(TCP/IPv4),j将自动获取IP改为手动设置,具体IP地址或者相关参数咨询网络管理员。如果当前电脑加入工作组或域,查看工作组的其他电脑IP设置,参照填写。
dhcp服务未启动或异常关闭时。在右键我的电脑,依次选择“管理”,“服务和应用程序”将dhcp client 服务设置为自动。
禁用本地连接网卡,然后重启。在自动获取IP情况下会获得IP重置,一般修复即为此操作。如果本地连接和无线网络连接同时启用,并且都可连接上网的情况下建议禁用一个,否则在使用过程中会造成网卡选择而造成短时间掉线。
在 运行中输入CMD,执行ipconfig/all命令,查看当前电脑IP及相关服务启用情况,如果IP为169开头的IP,说明电脑根本未和DHCP服务器连接成功,可能由以下原因造成:一、防火墙阻碍了电脑与DHCP服务器通信,设置防火墙或关闭防火墙。二、网卡驱动出现问题,此时自己的MAC地址全部为0,需要重新安装网卡驱动。三、线路或网卡连接问题,如果是这个问题而又未显示网络电缆已拔出,说明网线在和电脑、路由、或中间连接位置出现接触不良。请逐一检查。四、硬件问题,网线或者网卡出现问题。此时需要更换出现问题的相关硬件。(若怀疑为第4个原因时,请仔细核实确认,可以换一根网线或者用同局域网可以正常上网的其他网线连接来确认究竟是网卡还是网线的问题)。
网卡不能绑定IP造成的网络连接受限。同方法一,在TCP/IP协议中将IP地址填写为192.168.0.1,子网掩码为:255.255.255.0。其他不用填写,如果加入工作组或域,根据情况填写。
6
本地连接显示受限制,但可以上网。这个问题在网络连接-本地连接的设置里把无法连接时通知我的选项去掉即可。
7
下面给出一组常用的IP地址,在一时无法获得IP地址时可以参照使用:
IP:192.168.1.100~255
子网掩码:255.255.255.0
默认网关:192.168.1.1
DNS服务器(B):202.103.24.68
DNS服务器(E):202.103.44.150
J. 如何判断服务器是否做了访问限制
测试B服务器是否为网络问题:(B服务器要连接网络)
步骤一:
在B服务器的开始-》运行 中输入“ping www..com -t”【以网络网测试是否正常连接】
如果出现以下内容则为正常,否则为网络连接故障:
Reply from 220.181.6.18: bytes=32 time=48ms TTL=56
步骤二:
测试是否真的是A服务器上做了手脚:
知道A服务器的IP地址,或者网址,按步骤一来做即可