Python TCP Server And Client

作者:zhuge··预计阅读 12 分钟·662 阅读·0 评论
Python TCP Server And Client

创建TCP连接时,主动发起连接的是客户端,被动响应连接的是服务器。创建Socket时,AF_INET指定使用IPv4协议。如果要用更先进的IPv6,就指定为AF_INET6。SOCK_STREAM指定使用面向流的TCP协议.

实现服务端一个接到一个连接时新增一个线程,客户端通过线程发起三个连接

Server:

import socket
import threading
import time

def tcplink(sock, addr):     print(f'Accept new connection from {addr}')     sock.send('welcome!'.encode('utf-8'))     while True:         data = sock.recv(1024)         data_str=data.decode('utf-8')         time.sleep(0.1)         if not data or data.decode('utf-8') == 'exit':             break         print(f'get data from {addr} --> {data_str}')         sock.send(('hello,%s' % data_str).encode('utf-8'))     sock.close()     print(f'Connection from {addr} closed' )

def main():     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)     host = socket.gethostname()     port = 8888     s.bind((host, port))     s.listen(5)     print('-'  5, 'START', '-'  5)

    while True:         sock, addr = s.accept()         t = threading.Thread(target=tcplink, args=(sock, addr))         t.start()

if name=='main':     main()


Client

import socket
import threading
def tcpclient(thid):
    x = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    host = socket.gethostname()
    port = 8888
    x.connect((host, port))
    print(f'client {thid} start' )
    print(x.recv(1024).decode('utf-8'))
    for data in ['小红', '小白', '小丁']:
        x.send(data.encode('utf-8'))
        print(str(thid),':get data from server --> ',x.recv(1024).decode('utf-8'))
    x.send(b'exit')
    x.close()
    print(f'client {thid} closed' )
    
if name=='main':
    for i in range(3):
        xx = threading.Thread(target=tcpclient, args=(i,))
        xx.start()


相关文章

评论

加载中...