python实现客户端之间的通信_基于Python的服务端多线程与多客户端的通信过程

实现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:

print

"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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值