python TCP 两台间通信

由于工作需要,需要使用到不同电脑之间的通信问题,于是就开始琢磨这个玩意,看了一些资料,发现许多实现的是本机不同 服务端和客户端的通信,也有部分两台电脑的通信,通过学习后 ,我有想用这个写一个不同电脑之间实现聊天的功能,于是乎就出现了下面的东东,放代码:

服务端

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 并输出

各户端输入:你好

服务端接受:你好

看看效果图

由于是两台电脑通信,另一台电脑的图就没有放,大家有兴趣自己可以找两台电脑试试 

如果对你有所帮助,请点击关注,谢谢

猜你喜欢

转载自blog.csdn.net/weixin_42236288/article/details/82081383