tcp

tcp

1
2
import socket
server_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

服务端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# 绑定IP地址和端口
address = ("", 8000)
server_sock.bind(address)
# 让服务端的socket开启监听,等待客户端的连接请求
# listen中的参数表示已经建立链接和半链接的总数
# 如果当前已建立链接数和半链接数已达到设定值,那么新客户端不会立即connect成功,而是等待服务器能够处理时
server_sock.listen(128)


# 为了解决服务器socket可能的2MSL延迟问题,我们可以为服务器socket设置SO_REUSEADDR选项
'''
# 使用setsockopt()方法设置socket的选项参数
# SOL_SOCKET = Set Option Level _ SOCKET 设置选项级别为socket级
# SO_REUSEADDR = Socket Option _ REUSEADDR 设置socket的选项参数为重用地址功能
# 1 表示开启此选项功能,即开启重用地址功能
server_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

server_sock.set
'''








# 使用accept方法接收客户端的连接请求
# 如果有新的客户端来连接服务器,那么就产生一个新的套接字专门为这个客户端服务
# client_sock用来为这个客户端服务,与客户端形成一对一的连接
# 而server_sock就可以省下来专门等待其他新客户端的连接请求
# client_addr是请求连接的客户端的地址信息,为元祖,包含用户的IP和端口
client_sock, client_addr = server_sock.accept()

# recv()方法可以接收客户端发送过来的数据,指明最大收取1024个字节的数据
recv_data = client_sock.recv(1024)

# python3中收到的数据为bytes类型
# recv_data.decode()将bytes类型转为str类型


# send()方法向客户端发送数据,要求发送bytes类型的数据
client_sock.send("thank you!\n".encode())

# 关闭与客户端连接的socket
client_sock.close()

# 关闭服务端的监听socket
server_sock.close()

客户端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import socket

# 创建客户端socket用以跟服务器连接通信
# tcp协议对应为SOCK_STREAM
client_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# connect方法用来连接服务器
server_addr = ("127.0.0.1", 8000)
client_sock.connect(server_addr)

# 提示用户输入要发送的数据
msg = input("请输入要发送的内容:")
# send()方法想服务器发送数据
client_sock.send(msg.encode())

# recv()接收对方发送过来的数据,最大接收1024个字节
recv_data = client_sock.recv(1024)
print("收到了服务器的回应信息:%s" % recv_data.decode())

# 关闭客户端套接字
client_sock.close()
-------------end-------------
0%