Python中的套接字编程

服务器端:

import socket
import time
import threading

host = socket.gethostname()

port = 12345

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 创建socket (AF_INET:IPv4, AF_INET6:IPv6) (SOCK_STREAM:面向流的TCP协议)

s.bind((host,port))                                    # 绑定本机IP和端口(>1024)

s.listen(1)                                            # 监听,等待连接的最大数目为1

print('Server is running...')


def TCP(sock, addr):                                   # TCP服务器端处理逻辑

    print('Accept new connection from %s:%s.' % addr)  # 接受新的连接请求

    while True:
        data = sock.recv(1024)                         # 接受其数据
        time.sleep(1)                                  # 延迟
        if not data or data.decode() == 'quit':        # 如果数据为空或者'quit',则退出
            break
        sock.send(data.decode('utf-8').upper().encode())  # 发送变成大写后的数据,需先解码,再按utf-8编码,  encode()其实就是encode('utf-8')

    sock.close()                                       # 关闭连接
    print('Connection from %s:%s closed.' % addr)


while True:
    sock, addr = s.accept()                             # 接收一个新连接
    t = threading.Thread(target=TCP, args=(sock, addr))
    t.start()

客户端:

import socket

host = socket.gethostname()

port = 12345

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #创建一个socket

s.connect((host, port))                               #建立连接

while True:                                           #接受多次数据

    data = input('请输入要发送的数据:')                 #接收数据

    if data == 'quit':                                #如果为'quit',则退出
        break

    s.send(data.encode())                             #发送编码后的数据

    print(s.recv(1024).decode('utf-8'))               #打印接收到的大写数据

s.send(b'quit')                                       #放弃连接

s.close()                                             #关闭socket  

你可能感兴趣的:(Python中的套接字编程)