客户端代码:
import socket sk = socket.socket() address = ('127.0.0.1',8008) sk.connect(address) #连接服务端 print('已连接')
以上代码实现与服务端的连接。连接以后下面开始交互,必须是一收一发
while True: inp = input('>>>') if inp == 'exit': #如果输入exit,退出循环 break elif inp == '': #如果输入的内容为空,提醒用户,并让他重新输入 print('不能输入空白字符') continue sk.send(bytes(inp,'utf8')) #发送信息 data = sk.recv(1024) #接收信息 print(str(data,'utf8')) sk.close #关闭客户端连接
服务端代码:
import socket sk = socket.socket() #给socket创建对象 address = ('127.0.0.1',8008) #设置服务端的IP地址和端口号 sk.bind(address) #绑定地址 sk.listen(3) #设置客户端请求连接的排队数量(每次只能连接一个客户端)
注意:1.下面需要客户端连接,连接之前将在此阻塞
2.conn接收客户端对象,addr接收客户端IP地址和端口号
3.连接成功后,开始信息交互
1 while True: 2 print('waiting for connection..........') 3 conn, addr = sk.accept() # 在此接受客户端连接 4 while True: 5 try: 6 data = str(conn.recv(1024),'utf8') #接收客户端信息 7 if data != '': 8 print(data) 9 else: #如果接收到空内容,等待用户输入并重新接收 10 continue 11 except Exception as e: 12 print(e) 13 break 14 while True: 15 inp = input('>>>') 16 if inp == '': 17 print('不能发送空白字符') 18 continue 19 conn.send(bytes(inp,'utf8')) #收发的内容必须是bytes类型 20 break 21 sk.close()
在此加一个异常处理:当客户端强制关闭连接时报出异常,并等待下一个客户端连接
Linux下无需加异常处理,因为它会将强制关闭连接当做收到空值处理