一、TCP基础版
服务端:
import socket
#买手机 默认得到是一个TCP的socket
server = socket.socket()
#绑定手机卡
server.bind(("127.0.0.1",16888))
#开始待机
server.listen()
# 得到对方的socket对象与地址
client,addr = server.accept()
print('===============')
#buffersize 表示应用程序的缓冲区大小 recv其实是从系统缓冲区读取数据到应用程序
data = client.recv(1024)
print('===============')
print("收到客户端发来的数据:%s" % data.decode("utf-8"))
client.send(data)
client.close()
server.close()
客户端:
import socket
client = socket.socket()
client.connect(('127.0.0.1',16888))
client.send('hello 服务器'.encode('utf-8'))
print('===========================')
data = client.recv(1024)
print('===========================')
print("收到服务器:%s" % data.decode("utf-8"))
client.close()
二、TCP循环版
服务端:
import socket
server = socket.socket()
server.bind(('127.0.0.1',16888))
server.listen()
#连接循环,可以不断接受新连接
while True:
client,addr = server.accept()
#通讯循环,可以不断的收发数据
while True:
try:
#如果是windows,对方强行关闭连接,会抛出异常
#如果是linux,不会抛出异常,会死循环收到空的数据包
data = client.recv(1024)
if not data:
client.close()
break
print("收到客户端发来的数据:%s" % data.decode("utf-8"))
client.send(data)
except ConnectionResetError:
print('客户端强行关闭了连接')
client.close()
break
client.close()
server.close()
客户端:
import socket
client = socket.socket()
client.connect(('127.0.0.1',16888))
while True:
msg = input('>>>:')
client.send(msg.encode('utf-8'))
data = client.recv(1024)
print("收到服务器:%s" % data.decode("utf-8"))
client.close(