1.TCP
server:
import socket
import threading
import time
def tcplink(sock, addr):
print('Accept new connecting from %s:%s' % addr)
sock.send(b'Welcome!')
while True:
data = sock.recv(1024)
time.sleep(1)
if not data or data.decode('utf-8') == 'exit':
break
sock.send(('Hello,%s' % data.decode('utf-8')).encode('utf-8'))
sock.close()
print('Connect from %s:%s closed!' % addr)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建一个socket
s.bind(('127.0.0.1', 1234)) # 绑定ip和端口
s.listen(2) # 最多连接两个客户端,如果已经建立了两个连接,第三个客户端来再连接就得等待已连接的客户端断开后才能连接上
print('Waiting for connection...')
while True:
sock, addr = s.accept()
t = threading.Thread(target=tcplink(sock, addr))
---
Waiting for connection...
Accept new connecting from 127.0.0.1:59173
Connect from 127.0.0.1:59173 closed!
clent:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 1234)) # 连接127.0.0.1主机的1234端口
print(s.recv(1024).decode('utf-8'))
for data in [b'AAA', '李'.encode('utf-8')]:
s.send(data)
print(s.recv(1024).decode('utf-8'))
s.send(b'exit')
s.close()
---
Welcome!
Hello,AAA
Hello,李
2.UDP
server:
import socket
import threading
import time
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(('127.0.0.1', 1234)) # 绑定ip和端口,不需要listen,直接接收来自任何客户端的数据
print('bind udp on 1234...')
while True:
data, addr = s.recvfrom(1024)
print('Received from %s:%s' % addr)
s.sendto(b'Hello,%s!' % data, addr)
---
bind udp on 1234...
Received from 127.0.0.1:60479
Received from 127.0.0.1:60479
client:
import socket
import threading
import time
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
for data in [b'AAA', b'BBB']:
s.sendto(data, ('127.0.0.1', 1234))
print(s.recv(1024).decode('utf-8'))
s.close()
---
Hello,AAA!
Hello,BBB!
TCP需要建立连接才能通信,UDP不需要建立连接,服务器绑定的UDP和TCP端口互不冲突,例如可以同时为1234。