由于工作需要,需要使用到不同电脑之间的通信问题,于是就开始琢磨这个玩意,看了一些资料,发现许多实现的是本机不同 服务端和客户端的通信,也有部分两台电脑的通信,通过学习后 ,我有想用这个写一个不同电脑之间实现聊天的功能,于是乎就出现了下面的东东,放代码:
服务端
import socket , threading #导入模块,这两模块都是python自带的
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #创建基于IPv4和TCP协议的Scoket
#如果想使用更加优秀的IPv6 就指定为AF_INET6 ,SCOK_STREAM指定使用面向流的TCP协议
s.bind(('192.168.1.126',8888)) #监听端口 IP 填写本机IP 如果不知道本机IP地址 可以在 cmd 输入 ipconfig/all查看
s.listen(5) #调用listen 开始监听
print('waiting for connection')
def tcplink(scok,addr): #创建函数
sock.send(b'welcome') #测试是否能够连接(可以去除)
while True:
data=sock.recv(1024) #接受数据
if data.decode('utf-8')=='88' or data.decode('utf-8')=='bye':
print(data.decode('utf-8'))
messages=input()
message=bytes(messages,encoding='utf-8')
sock.send(message)
break
print(data.decode('utf-8'))
messages=input() #输入想要发送的内容
message=bytes(messages,encoding='utf-8') #将输入的内容处理成字节。因为send()只能发送字节
print(' %s'%messages)
sock.send(message)
sock.close() #关闭连接
while True:
sock,addr=s.accept() #等待并返回一个客服端的连接
t=threading.Thread(target=tcplink,args=(sock,addr)) #创建新的线程来处理TCP连接
t.start() #开始运行 #每个连接都需要创建新线程(或者进程)来处理连接,否则
#单线程在处理连接过程中,无法接受其它各户端的连接
客户端
import socket
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(('192.168.1.126',8888))#建立连接
print(s.recv(1024).decode('utf-8')) #接受welcome 1024是限制最大接受字节
while True:
messages=input()
message=bytes(messages, encoding='utf-8')
s.send(message)
print(' %s'%messages)#空格是为了模仿聊天时自己的发送的message在右侧
print(s.recv(1024).decode('utf-8'))
if messages=='88' or messages=='bye':
s.close()
break
下面我们来看看效果
在各户端输入123
服务端显示123
服务端输入456
各户端接受456 并输出
各户端输入:你好
服务端接受:你好
看看效果图
由于是两台电脑通信,另一台电脑的图就没有放,大家有兴趣自己可以找两台电脑试试
如果对你有所帮助,请点击关注,谢谢