精华内容
下载资源
问答
  • socket建立TCP连接

    千次阅读 2018-10-26 14:24:56
    TCP连接建立客户端与服务器端的连接话不多说直接上代码服务器端:客户端 话不多说直接上代码 做一个互相聊天的代码 不能同时发送,一边发,另一边只能收。 服务器端: import socket host = '127.0.0.1'#ip地址 port...

    TCP连接建立客户端与服务器端的连接

    话不多说直接上代码

    做一个互相聊天的代码,两边同时按1后进入聊天接受环节。

    由客户端最先向服务端发送数据,然后服务端收到内容后,服务端就可以向客户端发送内容了。

    不能同时发送,这一边发,另一边只能收。

    服务器端:

    import socket
    host = '127.0.0.1'#ip地址
    port = 8088#端口
    
    def Link():
        '''
            建立tcp连接,绑定IP和端口,可以进行网络通信,
            例如IP:cmd中ipconfig查看本机ipv4地址
        '''
        global s  #定义全局变量,为Function()方法使用
        s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#设置TCP连接
        s.bind((host,port))#绑定端口和地址,注意双括号。
        s.listen(5)#开始监听
        print("服务端已开启,等待客户端连接...")
        global conn
        conn, addr = s.accept()
        #接受连接,将连接的conn相当于客户端的名字     #print(conn)
        #addr是一个包含ip和port的元组      #print(addr)
        print("客户端已连接...\n")
    
    def Function(s,conn):
        print('输入你想操作的目录编号\n\
                1聊天\n\
                2你可以实现其他功能\n')
        while 1:
            data_num = int(input('请输入你要操作的序号:'))
            if data_num ==1:
                while 1:
                    info = conn.recv(1024).decode()
                    print('收到:'+info)
                    if info=='exit':
                        #收到客户端发来的exit时候结束循环
                        break
                    send_mes = input('发送:')
                    if send_mes =='exit':
                        #当主动发送exit时结束循环
                        conn.send(send_mes.encode())
                        break
                    else:
                        conn.send(send_mes.encode())
            elif data_num==2:
                print("自己写其他功能!")
                conn.close()#为了我的【tcp三次握手四次挥手】加的关闭连接。
                print("此时tcp连接已经断开了,你可以按功能1测试。")
                #实现其他功能
                pass
            else:
                print("输入有误!")
    
    if __name__=="__main__":
        Link()
        Function(s,conn)
    
    

    客户端

    import socket
    host = '127.0.0.1'#设置ip
    port = 8088 #端口
    
    def Link():
        '''
            建立tcp连接,绑定IP和端口,可以进行网络通信,
            例如IP:本机地址ipv4!
        '''
        global s
        s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        #连接服务端
        s.connect((host,port))
    
    def Function(s):
        '''
            实现与服务器端的一些通讯功能和对服务器内容的查看!
        '''
        print('输入你想操作的目录编号\n\
                1聊天\n\
                2你可以实现其他功能\n\
                3断开连接')
        while 1:
            data_num = int(input('请输入你要操作的序号:'))
            if data_num ==1:
                while 1:
                    send_mes=input('发送:')
                    if send_mes =='exit':
                        s.send(send_mes.encode())
                        #发送的是exit时候结束循环
                        break
                    else:
                        s.send(send_mes.encode())
                    info = s.recv(1024).decode()
                    if info =='exit':
                        #收到客户端发的exit时候结束循环
                        break
                    else:
                        print("收到:"+info)
            elif data_num==2:
                print("自己写其他功能!")
                s.close()#为了我的【tcp三次握手四次挥手】加的关闭连接。
                print("此时tcp连接已经断开了,你可以按功能1测试。")
            else:
                print("输入有误!")
    
    if __name__=="__main__":
        Link()
        Function(s)
        print("连接断开")
        s.close()
    
    
    

    注意1: 客户端程序和服务器端程序需要同时打开两个IDLE,分别new file复制上面代码运行。
    客户端与服务器端不能在同一个IDLE下打开的两个new file中运行,如果运行了会出现一下错误:
    Traceback (most recent call last):
    File “C:\Users\JF\Desktop\csdncilent.py”, line 46, in
    Link()
    File “C:\Users\JF\Desktop\csdncilent.py”, line 13, in Link
    s.connect((host,port))
    ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。

    注意2: 如果socket TCP连接这种报错,可以换个端口号试试。
    OSError: [WinError 10048] 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。

    python3亲测成功运行。
    谢谢支持!

    展开全文
  • Windows下建立TCP连接和终止TCP连接

    千次阅读 2016-09-13 13:10:18
    1.请仔细解释建立TCP连接的三个步骤。 答:三次握手 ⑴ 请求端发送一个SYN报文段指明客户打算连接的服务器端口号,以及初始化、序号,SYN请求发送后,客户进入SYN_SENT状态。 ⑵ 服务器启动后首先进入LISTEN状态,当...

    1.请仔细解释建立TCP连接的三个步骤。

    答:三次握手
    ⑴ 请求端发送一个SYN报文段指明客户打算连接的服务器端口号,以及初始化、序号,SYN请求发送后,客户进入SYN_SENT状态。
    ⑵ 服务器启动后首先进入LISTEN状态,当它收到客户发来的SYN请求后,进入SYN_REC状态,发回包含服务器的初始序号的SYN报文段作为应答,同时将确认序号设置为客户的初始序号加1,对客户的SYN报文段进行确认。一个SYN将占用一个序号。
    ⑶ 客户接收到服务器的确认报文后进入ESTABLISHED状态,表明本方连接已成功建立,客户将确认序号设置为服务器的ISN加1,对服务器的SYN报文段进行确认,当服务器接收到确认报文后,也进入ESTABLISHED状态。

    2.终止TCP连接的具体步骤有哪些?

    答:⑴客户的应用进程主动发起关闭连接请求,它将导致TCP客户发送一个FIN报文段,用来关闭从客户到服务器的数据传送,此时客户进入FIN_WAIT_1状态。
    ⑵当服务器收到这个FIN,它发回一个ACK,进入CLOSE_WAIT状态,确认序号为收到的序号加1.与SYN一样,一个FIN将占用一个序号,客户收到该确认后进入FIN_WAIT_2状态,表明本方连接已关闭,但仍可以接收服务器发来的数据。
    ⑶接着服务器程序关闭本方连接,其TCP端发送一个FIN报文段,进入LAST_AC状态,当客户接收到该报文段后进入TIME_WAIT状态。
    ⑷客户在收到服务器发来的FIN请求后,发回一个确认,并将确认序号设置为收到的序号加1,。发送FIN将导致应用程序关闭它们的连接,服务器接收到该确认后,连接关闭。
    展开全文
  • Linux 建立 TCP 连接的超时时间分析

    万次阅读 2018-01-28 20:22:27
    Linux 建立 TCP 连接的超时时间分析 Linux 建立 TCP 连接的超时时间分析 概述 超时分析 超时验证 如何改进 概述 Linux 系统默认的建立 TCP 连接的超时时间为 127 秒,对于许多客户端来说,这个时间都...

    Linux 建立 TCP 连接的超时时间分析


    概述

    Linux 系统默认的建立 TCP 连接的超时时间为 127 秒,对于许多客户端来说,这个时间都太长了, 特别是当这个客户端实际上是一个服务的时候,更希望能够尽早失败,以便能够选择其它的可用服务重新尝试。

    socket 是 Linux 下实现的传输控制层协议,包括 TCP 和 UDP,一个 socket 端点由 IP 和端口对来唯一标识; 如果开启了地址复用,那么可以进一步由协议,IP 和端口来唯一标识。

    系统调用 connect 则是用来尝试建立 socket 连接(TCP),著名的 TCP 三次握手实际上也由 connect 来触发完成的。

    超时分析

    网络中的连接超时非常常见,所以连接加入了重试机制, 同时为了不给服务端带来过大的压力,重试也是有相应的策略,有一定的退避机制和重试次数。

    在 Linux 中,连接超时典型为 2 分 7 秒,而对于一些 client 来说,这是一个非常长的时间; 所以在编程中,可以使用非阻塞的方式来实现,例如:使用 poll, epoll 等系统调用来实现多路复用等待。

    下面来看看 2 分 7 秒是怎样来的,以及怎样配置 Linux kernel 来缩短这个超时。
    
    2 分 7 秒
    2 分 7 秒即 127 秒,刚好是 2 的 7 次方减一,对数字敏感的读者可能已经看出来了,如果 TCP 握手的 SYN 包超时重试按照 2 的幂来退避, 那么:
    
    第 1 次发送 SYN 报文后等待 1s(2 的 0 次幂),如果超时,则重试
    第 2 次发送后等待 2s(2 的 1 次幂),如果超时,则重试
    第 3 次发送后等待 4s(2 的 2 次幂),如果超时,则重试
    第 4 次发送后等待 8s(2 的 3 次幂),如果超时,则重试
    第 5 次发送后等待 16s(2 的 4 次幂),如果超时,则重试
    第 6 次发送后等待 cr(2 的 5 次幂),如果超时,则重试
    第 7 次发送后等待 64s(2 的 6 次幂),如果超时,则超时失败
    上面的结果刚好是 127 秒。也就是说 Linux 内核在尝试建立 TCP 连接时,最多会尝试 7 次。
    

    超时验证

    我们如何来验证呢?下面就具体和大家一起分享下:
    首先,配置 iptables 来丢弃指定端口的 SYN 报文

    # iptables -A INPUT --protocol tcp --dport 5000 --syn -j DROP 添加过滤
    

    PS;别忘了用—D进行删除;需要root权限;

    tcpdump,又该你上场了

    # tcpdump -i lo -Ss0 -n src 127.0.0.1 and dst 127.0.0.1 and port 5000
    

    测试:

    [matrix@localhost ~]$ date; telnet 127.0.0.1 5000; date
    2018年 01月 24日 星期三 22:38:15 CST
    Trying 127.0.0.1...
    telnet: connect to address 127.0.0.1: Connection timed out
    2018年 01月 24日 星期三 22:40:22 CST
    [matrix@localhost ~]$ 
    
    
    [matrix@localhost ~]$ sudo tcpdump -i lo 'tcp[tcpflags] = tcp-syn'
    [sudo] password for matrix: 
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on lo, link-type EN10MB (Ethernet), capture size 65535 bytes
    22:38:15.825569 IP localhost.54464 > localhost.commplex-main: Flags [S], seq 2345953452, win 32792, options [mss 16396,sackOK,TS val 19650917 ecr 0,nop,wscale 7], length 0
    22:38:16.825246 IP localhost.54464 > localhost.commplex-main: Flags [S], seq 2345953452, win 32792, options [mss 16396,sackOK,TS val 19651917 ecr 0,nop,wscale 7], length 0
    22:38:18.825139 IP localhost.54464 > localhost.commplex-main: Flags [S], seq 2345953452, win 32792, options [mss 16396,sackOK,TS val 19653917 ecr 0,nop,wscale 7], length 0
    22:38:22.825095 IP localhost.54464 > localhost.commplex-main: Flags [S], seq 2345953452, win 32792, options [mss 16396,sackOK,TS val 19657917 ecr 0,nop,wscale 7], length 0
    22:38:30.825387 IP localhost.54464 > localhost.commplex-main: Flags [S], seq 2345953452, win 32792, options [mss 16396,sackOK,TS val 19665917 ecr 0,nop,wscale 7], length 0
    22:38:46.825921 IP localhost.54464 > localhost.commplex-main: Flags [S], seq 2345953452, win 32792, options [mss 16396,sackOK,TS val 19681918 ecr 0,nop,wscale 7], length 0
    22:39:18.826499 IP localhost.54464 > localhost.commplex-main: Flags [S], seq 2345953452, win 32792, options [mss 16396,sackOK,TS val 19713918 ecr 0,nop,wscale 7], length 0
    
    

    如何改进

    怎样修改 connect timeout
    对于很多客户端程序来说,127 秒都是一个很长的时间,特别是对于局域网来说,公司内部往往都具有网络质量较好的局域网, 访问内部的服务并不需要等待这么长的超时,而可以 fail earlier。

    Linux 内核中,net.ipv4.tcp_syn_retries 表示建立 TCP 连接时 SYN 报文重试的次数,默认为 6,可以通过 sysctl 命令查看。

    # sysctl -a | grep tcp_syn_retries
    
    vim /etc/sysctl.conf
    net.ipv4.tcp_syn_retries = 6
    将其修改为 1,则可以将 connect 超时时间改为 3 秒,例如:
    # sysctl net.ipv4.tcp_syn_retries=1
    之后,sysctl -p /etc/sysctl.conf 
    

    再次使用 telnet 验证超时时间,如下:

    [matrix@localhost ~]$ date; telnet 127.0.0.1 5000; date
    2018年 01月 24日 星期三 22:46:19 CST
    Trying 127.0.0.1...
    telnet: connect to address 127.0.0.1: Connection timed out
    2018年 01月 24日 星期三 22:46:22 CST
    
    
    [matrix@localhost ~]$ sudo tcpdump -i lo 'tcp[tcpflags] = tcp-syn'
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on lo, link-type EN10MB (Ethernet), capture size 65535 bytes
    
    
    22:46:19.439704 IP localhost.54467 > localhost.commplex-main: Flags [S], seq 3513959316, win 32792, options [mss 16396,sackOK,TS val 20134532 ecr 0,nop,wscale 7], length 0
    22:46:20.439675 IP localhost.54467 > localhost.commplex-main: Flags [S], seq 3513959316, win 32792, options [mss 16396,sackOK,TS val 20135532 ecr 0,nop,wscale 7], length 0
    
    
    展开全文
  • 8080端口建立TCP连接。。。本地机器和远程机器的8080都要开放吗?。。。谢谢!!!!!
  • 和服务器建立TCP连接的工具

    千次阅读 2017-08-31 10:33:47
    工具个人知道的,和服务器建立TCP连接的工具有两个: telnet nc 使用方法在看《Java核心卷2》的Socket使用方法时,看到书上例子是使用 telnet 进行测试的。上网看了一下 telnet 原理。telnet 其实就是一个建立TCP...

    工具

    个人知道的,和服务器建立TCP连接的工具有两个:

    • telnet
    • nc

    使用方法

    在看《Java核心卷2》的Socket使用方法时,看到书上例子是使用 telnet 进行测试的。上网看了一下 telnet 原理。telnet 其实就是一个建立TCP连接,并且能向服务器发送和接收“字符流”的工具。

    前一段时间,看到了nc命令,这个也可以建立 TCP 监听,并且还可以连接 TCP。所以,下面使用 telnet 的地方,也可以使用nc命令。

    Java程序如下:

    package socket;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.Scanner;
    
    public class SocketServerTest {
        public static void main(String[] args) throws IOException {
    
            try (ServerSocket server = new ServerSocket(9111)) {
    
                try (Socket incoming = server.accept()) {
                    InputStream inStream = incoming.getInputStream();
                    OutputStream outStream = incoming.getOutputStream();
    
    
                    try (Scanner in = new Scanner(inStream)) {
                        PrintWriter out = new PrintWriter(outStream, true);
                        out.println("Hello! Say BYE to exit");
    
                        boolean done = false;
                        while (!done && in.hasNextLine()) {
    
                            String line = in.nextLine();
                            out.println("Echo:" + line);
                            if (line.trim().equals("BYE")) done = true;
                        }
                    }
                }
            }
    
        }
    }

    telnet命令:

    telnet localhost 9111

    nc命令:

    nc localhost 9111
    展开全文
  • ESP8266发AT指令与服务器建立TCP连接 1.首先,去下载个PHPstudy,傻瓜式安装,打开之后启动Apache 2.设置端口号,自己随便设一个,不要与常用端口冲突就可以了。 3.用串口调试助手发AT指令,以我自己的电脑作为...
  • Linux 系统默认的建立 TCP 连接的超时时间为 127 秒,对于许多客户端来说,这个时间都太长了, 特别是当这个客户端实际上是一个服务的时候,更希望能够尽早失败,以便能够选择其它的可用服务重新尝试。 socket 是 ...
  • windows server 2012R2发起建立TCP连接,有时会特别慢。下载一个http页面需要9秒多。 通过网络抓包,可以发现,建立连接前重发了三次[SYN, ECN, CWR],每次3秒正好9秒,然后改用标准的[SYN, ACK],很快就收到回应。...
  • Java代码建立TCP连接

    千次阅读 2017-12-10 19:55:00
    建立TCP连接 1)IP地址,2) 端口号 String ip= "192.168.187.129" ; int port= 554 ; Socket sck= new Socket(ip,port); //2、传输内容 String content= "这是一个JAVA模拟客户端-10000" ; byte [] ...
  • 建立tcp连接需要几次握手?

    千次阅读 2019-09-18 11:38:26
    一个完整的 TCP连接建立,需要三次握手,然后双方以全双工的方式发送和接收数据。很多的端口扫描技术是依靠 TCP三次握手来实现的,所以,下面对 TCP的三次握手过程进行详细的介绍。具体的握手过程描述如下(图4): ...
  • 下载同步文件使用的是https请求,经抓包得知,在试图建立TCP连接时,客户端发送三次握手申请的SYN包,但是服务器没有回应ACK,然后客户端触发了TCP的丢包重转,重发SYN包,但服务器始终没回ACK,导致无法完成建立TCP...
  • SIM800系列模块GSM/GPRS建立TCP连接到远端服务器过程 (2016-12-20 18:25:29) 转载▼ 标签: it 分类:技术笔记 SIM800模块是全球领先的M2M模块及解决方案供应商芯讯通无线科技有限
  • Java网络编程(一) 建立TCP连接

    千次阅读 2016-09-28 22:48:42
    TCP连接是最常用的网络通信方式之一,其特点是:连接一直存在,随时可以发送和接收数据。一旦连接断开,发送和接收都会失败(抛出异常)。 Server端代码 import java.io.IOException; import java.io....
  • 使用Java建立TCP连接并发送数据

    万次阅读 2017-04-25 19:34:31
    TCP协议:传输控制协议 ,应用于运输层 客户端代码--发送请求: import java.io.IOException; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; public class ...
  • 发送: AT+CIPCSGP=1,"CMNET",设置为GPRS连接,接入点为”CMNET“] 6、AT+CLPORT="TCP","2000" [设置 TCP 连接本地端口号为 2000] 7、AT+CIPSTART="TCP","180.120.52.129","8086" [建立一个TCP连接,连接目标地址...
  • 客户端和服务端哪个先完成建立tcp连接? 这是个有趣的问题, 需要对socket编程和TCP三次握手有所了解。  从三次握手的过程来看, 当然是connect函数先返回啦。  connect正常返回后, 客户端认为建立TCP连接,...
  • 关于跨网段建立TCP连接的思考

    千次阅读 2013-01-20 20:25:34
    最近学习计算机网络,想弄个程序练习一下,于是就想到了在局域网内部传输文件练练手,在网上down了个程序,很快就可以跑通了,可以实现同一网段互相传输文件,但这个工作似乎很多软件已经做得很好了,比如IP信使、...
  • 先说结论: 执行了如下的命令后,问题解决。 之前nf_conntrack_max的值是65536 ... =================================== ... 当php的请求量稍微变大的时候(nginx+php-fpm的架构),php对外建立连接的时间 conn
  • 1.硬件资源:野火STM32 霸道(板载ESP8266WiFi模块),WiFi默认与STM32串口2连接。 2.软件开发环境:MDK5 基于固件库开发 3.常用AT指令集测试 AT:测试模块是否存在 期待值 OK。 AT+RST 重启模块。 AT+...
  • 图解TCP连接建立与释放

    万次阅读 2017-04-17 00:59:26
    因此,在传输数据之前通信双方必须建立一个TCP连接建立TCP连接需要在服务器和客户端之间进行三次握手。通信双方数据传输完毕之后连接释放,释放连接需要在通信双方之间进行四次挥手。2.TCP状态机 TCP所谓的
  • 因此,在传输数据之前通信双方必须建立一个 TCP 连接建立 TCP 连接需要在服务器和客户端之间进行三次握手。通信双方数据传输完毕之后进行连接释放,释放连接需要在通信双方之间进行四次挥手。
  • TCP连接建立

    千次阅读 2018-01-16 15:37:18
    前言:TCP的问题已然困惑我很久了,一直是一知半解,靠记忆来记住TCP连接的过程,不能根本上理解,漏洞百出,最近抽时间把TCP经典书籍——《 TCP-IP详解》阅读了一下。...上图是TCP连接建立的宏观过程: 1)
  • TCP连接建立和终止 详解

    万次阅读 2012-11-16 17:26:02
    一.TCP连接建立 TCP连接是在IP网络中两个进程间(应用层协议)的双向、全双工的逻辑回路。由节点的IP地址和端口将连接双方对应起来。  1.TCP连接特点: 通过一个握手进程建立起来; 通过一个周期性保持进程来...
  • TCP连接复用

    千次阅读 2016-06-03 09:15:47
    TCP连接复用技术通过将前端多个客户的HTTP请求复用到后端与服务器建立的一个TCP连接上。这种技术能够大大减小服务器的性能负载,减少与服务器之间新建TCP连接所带来的延时,并最大限度的降低客户端对后端服务器的...
  • 单机最大tcp连接

    万次阅读 2016-09-01 15:13:24
    在tcp应用中,server事先在某个固定端口监听,client主动发起连接,经过三路握手后建立tcp连接。那么对单机,其最大并发tcp连接数是多少? 如何标识一个TCP连接 在确定最大连接数之前,先来看看系统如何标识一个...
  • 一个TCP连接通常分为3个阶段:启动、数据传输(也称为“连接已建立”)、退出 下面我们介绍典型的TCP连接建立与关闭过程(不包括任何数据传输) 一、TCP连接建立(三次握手) TCP连接建立分为3步: 1.主动...
  • 一个端口到底可以建立多少TCP连接? 这是一个很基础的问题,但是网上对于这个问题的解释千奇百怪。 有人说,一个端口只能建立一个TCP连接,所以说无论服务还是客户端都最多只能建立65535个TCP连接。还有人说,服务端...
  • C#建立TCP/IP连接

    万次阅读 多人点赞 2017-04-20 23:08:50
    C#建立TCP/IP连接在C/S模式下做网络信号传输,使用TCP/IP协议是首选。 其传输机制: 首先服务端与客户端建立套接字(socket)连接建立完套接字后,服务端与客户端通过套接字进行数据传输。通常服务端和客户端...
  • tcp建立连接的时的几种状态

    千次阅读 2020-10-18 10:37:53
    CLOSED:初始状态,表示没有任何连接。 LISTEN:Server端的某个Socket正在监听来自远方的TCP端口的连接请求。 ...通常是建立TCP连接的三次握手过程中的一个中间状态,表示Server端的Socket接收到

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 924,269
精华内容 369,707
关键字:

怎么建立tcp连接