客户端代码:
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下无需加异常处理,因为它会将强制关闭连接当做收到空值处理