服务端代码
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import socket
def do_server(ip,port):
ip_port=(ip,port)
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#连接地址
s.bind(ip_port)
# 开始TCP监听.指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为 1,大部分应用程序设为 5 就可以了。
s.listen(5)
while True:
c,address =s.accept()
print("客户端连接地址:",address)
c.sendall('连接成功!!!'.encode())
Flag = True
while Flag:
#接收 TCP 数据,数据以字符串形式返回,bufsize 指定要接收的最大数据量。
data = c.recv(1024) #接受客户端传递过来的消息
# c.send()发送 TCP 数据,将 string 中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于 string 的字节大小。
# c.sendall()完整发送 TCP 数据。将 string 中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回 None,失败则抛出异常。
c.sendall('服务端回应:已经收到:'.encode()+data)
if data == 'exit':
Flag = False
else:
print("客户端传递过来的消息是:"+data.decode())
c.close()
s.close()
if __name__ == '__main__':
do_server("localhost", 8005)
示例效果:
客户端代码
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import socket
from past.builtins import raw_input
def cli_do(ip,port):
ip_port=(ip,port)
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#主动初始化TCP服务器连接。一般ip_port的格式为元组(hostname,port),如果连接出错,返回socket.error错误。
s.connect(ip_port)
s.settimeout(5)
while True:
#接收 TCP 数据,数据以字符串形式返回,bufsize 指定要接收的最大数据量。flag 提供有关消息的其他信息,通常可以忽略。
receive_data = s.recv(1024)
print(receive_data.decode())
inp = raw_input('要发送给服务端的数据:')
# conn.send()发送 TCP 数据,将 string 中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于 string 的字节大小。
# conn.sendall()完整发送 TCP 数据。将 string 中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回 None,失败则抛出异常。
s.sendall(inp.encode())
if inp == 'exit':
break
s.close()
if __name__ == '__main__':
cli_do("localhost", 8005)
示例效果: