TCP 소켓 통신 간단한 사이클을 구현 (파이썬)

A, 소켓 통신 과정

TCP 서버 소켓을 생성 -> IP 주소와 포트 바인딩 -> 클라이언트 연결 요청을 수신 -> 들어오는 클라이언트 연결 (클라이언트 연결) -> 블록 클라이언트 연결될 때까지 -> 처리 요청 (통신주기) -> 연결을 종료 -> 닫기 소켓

TCP 클라이언트 소켓 생성 -> IP와 서버에 연결된 포트 -> 요청을 처리 (통신주기) -> 닫기 소켓

둘째, 소켓 함수

1. 서버 소켓 기능

s.bind (주소)

소켓은 터플 어드레스 (호스트 포트)로 표현 AF_INET 주소에 바인딩된다.

s.listen (백 로그)

들어오는 TCP 접속을 대기 시작합니다. 연결을 거부하기 전에 지정된 백 로그, 운영 체제는 최대 연결 수를 일시 중단 할 수 있습니다. 적어도 하나의 값은 애플리케이션의 대부분은 5로 설정된다.

s.accept ()

그리고 CONN 새로운 소켓 객체 인 TCP 연결 (CONN, 주소)를 받아 반환, 수신 및 전송 데이터를 사용할 수 있습니다. 주소는 연결하는 클라이언트의 주소입니다.

2. 클라이언트 소켓 함수

s.connect (주소)

주소로 소켓에 연결. 어드레스 튜플 (호스트 포트)의 일반적인 형식은, 연결 오류, 오류 리턴 socket.error 경우.

3. 공공 소켓 기능

s.recv (BUFSIZE [플래그])

TCP 소켓 데이터에 동의합니다. 데이터를 수신 할 최대 데이터 량을 지정 BUFSIZE 문자열로 반환된다. 플래그는 메시지에 대한 추가 정보는 일반적으로 무시 될 수 있습니다.

s.send (문자열 [플래그])

TCP 데이터를 전송합니다. 송신 데이터 문자열은 소켓에 연결되어 있습니다. 리턴 값이 숫자 문자열의 바이트 크기보다 작을 수있다, 바이트 수를 송신한다.

s.close ()

소켓을 닫습니다.

셋째, 코드 구현 (버전 A)

결과를 달성 : 클라이언트가 일방적으로 메시지를 보낼 서버 디스플레이는 메시지가 클라이언트에서 보낸

server.py

import socket

# 创建套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定ip地址与端口号
sock.bind(('127.0.0.1', 8080))

# 建立监听,最大连接数为5个
sock.listen(5)

# 接收客户端的连接
conn, client_addr = sock.accept()

# 通讯循环
while True:
    # 接收消息
    msg = conn.recv(1024)  # 最大接收字节数为1024
    if not msg:
        continue
    print('client is sending: ' + msg.decode('utf-8'))

# 断开连接
conn.close()

# 关闭套接字
sock.close()

client.py

import socket

# 创建套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接服务端
sock.connect(('127.0.0.1', 8080))

# 建立通讯循环
while True:
    msg = input('Enter your message: ')
    if msg == 'quit':
        print('communication ended')
        break
    sock.send(msg.encode('utf-8'))  # Mac操作系统使用utf-8编码方式

# 断开连接
sock.close()

서버를 실행하고 클라이언트를 실행

결과를 작동 : (P1 client.py, P2 server.py)

넷째, 코드 구현 (제 2 판)

클라이언트 서버 메시징 상호 운용성

server.py

import socket

# 创建套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定ip地址与端口号
sock.bind(('127.0.0.1', 8081))

# 建立监听,最大连接数为5个
sock.listen(5)

# 接收客户端的连接
conn, client_addr = sock.accept()

# 通讯循环
while True:
    # 接收消息
    msg = conn.recv(1024)  # 最大接收字节数为1024
    if not msg:
        continue
    print('client is sending: ' + msg.decode('utf-8'))
    reply = input('reply: ')
    conn.send(reply.encode('utf-8'))

# 断开连接
conn.close()

# 关闭套接字
sock.close()

client.py

import socket

# 创建套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接服务端
sock.connect(('127.0.0.1', 8081))

# 建立通讯循环
while True:
    msg = input('Enter your message: ')
    if msg == 'quit':
        print('communication ended')
        break
    sock.send(msg.encode('utf-8'))  # Mac操作系统使用utf-8编码方式
    reply = sock.recv(1024)
    print('server is sending: ' + reply.decode('utf-8'))

# 断开连接
sock.close()

서버를 실행하고 클라이언트를 실행

결과를 작동 : (P1 client.py, P2 server.py)


추천

출처www.cnblogs.com/rainbow-ran/p/12535999.html