对比以前学习java网络编程,最想写的一个程序就是简单的客户端及服务器,然后实现两方的通信。
下面写一个简单的服务器与客户端的例子
Server:
# ----------------------------------
__author__ = 'zWX231671'
__description__ = ''
# ----------------------------------
import socket
HOST = '' # Symbolic name meaning all available interfaces
PORT = 50007 # Arbitrary non-privileged port
# step1 创建socket对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 设置socket参数,一般情况下,程序终止后,都会将端口保留一段时间,避免其他进程及本服务器的的另外实例使用
# 设置 socket.SO_REUSEADDR 为true时,在服务器socket被关闭或者服务器进程终止后马上释放服务器的端口
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 绑定主机及端口
s.bind((HOST, PORT))
# 监听连接
s.listen(1)
conn, addr = s.accept()
print('Connected by', addr)
while True:
data = conn.recv(1024)
print('receive from client ', data)
if not data: break
conn.sendall(data)
conn.close()
主要步骤:
- 创建socket对象
- 设置socket参数
- 绑定主机及端口
- 监听连接
- 发送数据
Client:
# ----------------------------------
__author__ = 'zWX231671'
__description__ = ''
# ----------------------------------
import socket
HOST = '127.0.0.1' # The remote host
PORT = 50007 # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.sendall(b'Hello, world')
data = s.recv(1024)
s.close()
print('Received', repr(data))
主要步骤:
- 创建socket对象
- 设置参数
- 绑定主机与端口
- 连接服务器
- 发送数据