TCP链接

使用socket库

服务端:tcpServer.py

#-*- coding: utf-8 -*-
# Filename: tcpServer.py
‘‘‘
server端的socket一般流程是这样:
1.建立一个socket(可以选择socket类型INET,UNIX等,以及连接方式TCP/UDP)
2.使用bind公开一个端口,使得client可以方便连接
3.设置一个listen队列的大小
4.进入一个无限循环,在此无限循环中,使用accept函数来等待客户连接,此函数返回一个新的socket, 对应于客户端的socket,建立通信信道。对socket的处理一般放在外部单独的函数中(并发)
5.通过send()/recv()来对socket进行读写操作
‘‘‘
import socket
import threading
class tcpServer(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.srvsock = socket.socket( socket.AF_INET, socket.SOCK_STREAM)
        self.srvsock.bind((‘‘, 5004))
        self.srvsock.listen(1)
        print ‘Server init‘
        
    def startServer(self):
        while True:
            self.clisock, (self.remoteHost, self.remotePort) = self.srvsock.accept()
            print "[%s:%s] conneted" % (self.remoteHost, self.remotePort)
            self.clisock.settimeout(5)
            print "[recv...]"
            buf = self.clisock.recv(1024)
            try:
                if buf == ‘1‘:
                    self.clisock.send(‘[Welcome to Server!]‘)
                else:
                    self.clisock.send(‘Please go out‘)
            except socket.timeout:
                print ‘time out‘
                
            self.clisock.close()
            
    def run(self):
        print ‘Server start‘
        self.startServer()

    def __del__(self):
        print ‘Server is stop‘
if __name__ == "__main__":
    s = tcpServer()
    s.start()

客户端:tcpClient.py

#-*- coding: utf-8 -*-
#FileName: TcpClient.py
‘‘‘
建立一个新的socket
1.使用connect函数与远程主机获得连接
2.在此socket上进行I/O操作
‘‘‘
import socket
def tcpClient():
    print ‘client is conneting...‘
    clisock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    clisock.connect((‘localhost‘, 5004))
    import time
    time.sleep(2)
    clisock.send(‘1‘)
    buf = clisock.recv(1024)
    print ‘recv ‘, buf
    print ‘client is over‘
    clisock.close()
    
if __name__ == "__main__":
    tcpClient()

使用PythonWin先运行tcpServer,再运行tcpClient

时间: 2024-12-12 14:03:48

TCP链接的相关文章

ss is one another utility to investigate sockets(特适合大规模tcp链接)

原创文章,转载请注明: 转载自系统技术非业余研究 本文链接地址: ss is one another utility to investigate sockets(特适合大规模tcp链接) 具体的可以参考这里 他的最大特点是快, 当你的系统有上万个tcp链接要了解的时候的时候, 你就知道我说什么了. netstat等常规工具变成废铁了, 这时候他的作用就非常明显了. /proc interface is inadequate, unfortunately. When amount of sock

HTTP中GET与POST的区别 (本质上是一样一样的TCP链接)

(转自微信公众号WebTechGarden) GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数. 你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么. 当你在面试中被问到这个问题,你的内心充满了自信和喜悦. 你轻轻松松的给出了一个"标准答案": GET在浏览器回退时是无害的,而POST

网站TCP链接暴增

昨天上线后,TCP链接暴增,红点增多. 问题在查.其中有一部分,多线程修改,突破了线程数 64的限制.线程内,会发起网络请求. 怀疑是热点之一.其他的部分也有修改,也被怀疑.准备下次,2部分分开上线.进行线上测试. 昨天的情况是cpu,内存没有峰值,抖动,但是tcp有峰值,部分接口访问失败.超时. 多线程,网络,果然是编程的重点部分啊. 网站TCP链接暴增

TCP链接的建立与终止

包含 connect.accept和close三个函数,并使用netstart程序调试TCP应用. 建立TCP连接:需要三个分节 1.服务器必须准备好接受外来的链接,可调用socket.bind和listen三个函数完成,被动打开: 2.客户调用connect发起主动打开.客户TCP发送一个SYN(同步)分节,告诉服务器客户将在连接中发送的数据的初始序列号.通常SYN分节不携带数据,该IP数据报只包含有一个IP首部.一个TCP首部及可能有的TCP选项. 3.服务器必须确认(ACK)客户的SYN,

TCP链接的三次握手与四次断开

一直总觉得三次握手和四次断开,之前老师讲的有问题,经过自己再次琢磨,发现是的,老师讲的没毛病,这次也把自己的理解总结一下,让对这个知识模糊的小伙伴再换种思路去理解 首先看一下TCP三次握手发生了哪些: TCP三次握手 这是第一次用画图工具画图,有点low,细节处理的不好见谅 这是第一次设计三次握手的过程,实际上发生了四件事,其次你要清楚TCP链接建立的标准是双向的,就像谈恋爱表白一样,你必须俩人相互喜欢才能表白成功啊 白话版:TCP 链接建立就像谈恋爱一样,互相表白才是表白成功背景条件:某专业

Linux TCP 链接状态

1.查看Web服务器(Nginx Apache)的并发请求数及其TCP连接状态:  netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' netstat -n|grep  ^tcp|awk '{print $NF}'|sort -nr|uniq -c   或者: netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"t&

TCP链接过程

TCP需要三次握手才能建立,而断开连接则需要四次挥手.整个过程如下图所示: TCP头部: 其中 ACK SYN FIN 序号会在后面用到. ACK(ACKnowledgment) : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1 SYN(SYNchronization): 在连接建立时用来同步序号.当SYN=1而ACK=0时,表明这是一个连接请求报文.对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1. 因此, SYN置1就表示这是一个连接请求或

TCP 链接 存在大量 close_wait 等待

大量 close_wait 等待 调整linux下 /etc/sysctl.conf参数,里面设置参数: # net.ipv4.tcp_keepalive_time 然后执行 # sysctl -p 原文地址:https://www.cnblogs.com/sharesdk/p/9203894.html

一台服务器支持多少TCP并发链接

误区一 1.文件句柄---文件描述符 每开一个链接,都要消耗一个文件套接字,当文件描述符用完,系统会返回can't  open so many files 这时你需要明白操作系统对可以打开的最大文件数的限制. 1>进程限制 每个进程最多只可打开1024个文件描述符 2>全局限制   输入cat /proc/sys/fs/file-nr ,第一个显示已经分配的文件描述符  第二个表示以分配但是没有使用的文件描述符  第三个表示最大的文件描述符数目 误区二 2.端口号限制 操作系统中有65535个