实现server服务端多线程程序,可以开启多个客户端,每个客户端都能实现向服务端发送数据的过程,可以设置最大监听客户端数。
服务端使用命令:
python server.py 520 进行开启
其中server.py后面的参数520是自己设置的端口号
客户端使用命令:
python client.py
--ip 192.168.0.55 --port 520
其中 –ip
后面的是主机服务端的IP地址 –port
后面的是端口号
也可以单独开启服务端,然后使用网络调试助手进行连接测试以及发送内容测试等
服务端程序代码:
#!/usr/bin/python
#coding:utf-8
import socket
import sys
import threading
def threadfun(sock,addr):
try:
while True:
data = sock.recv(1024)
if data == "quit" or data == "exit":
print "Client %s exit!" % addr[0]
break
if data:
print "Message from %s:%s" % (addr[0],data)
sock.send("Hello,%s" % data)
sock.close()
except socket.erron,e:
print "Socket error : %s" % str(e)
except Exception as e:
print "Other exception: %s" % str(e)
finally:
sock.close()
def server(port):
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 启用地址重用
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,
1)
# 绑定地址和端口号
srv_addr = ("0.0.0.0", port)
# 侦听客户端
sock.bind(srv_addr)
sock.listen(5)
while True:
conn,addr = sock.accept()
t = threading.Thread(target=threadfun, args=(conn,
addr))
t.start()
if __name__ == "__main__":
if
len(sys.argv) == 2:
port
= sys.argv[1]
server(int(port))
else:
"Input error."
客户端程序代码:
#!/usr/bin/python
#coding:utf-8
import socket
import sys
import argparse
def client(host,port):
# 创建TCP套接字
sock =
socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 连接服务器
srv_addr = (host, port)
sock.connect(srv_addr)
# 发送并接收数据
try:
while True:
msg = raw_input("Please input: ")
sock.sendall(msg)
if msg == "quit" or msg == "exit":
break
data = sock.recv(1024)
print "Message from server: %s" % data
sock.close()
except socket.erron,e:
print "Socket error : %s" % str(e)
except Exception as e:
print "Other exception: %s" % str(e)
finally:
sock.close()
if __name__ == "__main__":
parser
= argparse.ArgumentParser(description="Socket Server Example")
parser.add_argument("--ip",
action="store", dest="host", type=str, required=True)
parser.add_argument("--port",
action="store", dest="port", type=int, required=True)
given_args
= parser.parse_args()
host
= given_args.host
port
= given_args.port
client(host,
port)