首先我们要了解服务端的代码逻辑和客户端的代码逻辑

服务端的代码逻辑

创建套接字

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

绑定IP和端口号

#绑定IP和端口 端口<=65535
s.bind(('127.0.0.1',3428))

等待客户的连接

        有人来

        创建一个线程用于收数据

        创建一个线程用于发数据

发送数据线程

        等待服务端在终端输入内容,然后方发送给客户端

收数据线程

        等待客户端发送的数据,然后打印到终端

关闭连接

s.close()

客户端的代码逻辑

创建套接字

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

连接指定的服务端的IP和端口号

#连接指定端口,IP
s.connect(('127.0.0.1',3428))

        创建一个线程用于收数据

        创建一个线程用于发数据

发送数据线程

        等待客户端在终端输入内容,然后方发送给服务端

收数据线程

        等待服务端发送的数据,然后打印到终端

关闭连接

s.close()

使用的模块

import socket,threading

整体代码如下:

1.简单的

服务端:

import socket,threading#通信使用的模块
#新建套接字
def threadFun(ssock):
    print("有人来了")

    while True:
        if ssock is not None:
            buff = ssock.recv(1024)
            str = buff.decode('utf-8')
            if str == "close":
                print("client close")
                break
            elif str == "":
                break
            else:
                print("接收的数据:%s"%buff.decode('utf-8'))
        else:
            break

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#绑定IP和端口 端口<=65535
s.bind(('127.0.0.1',3428))
#开启监听
s.listen(5)
#等待连接
while True:
    #一直等待用户来连接
    print("等待连接")
    conn,address = s.accept()
    th = threading.Thread(target=threadFun,args=(conn,))
    th.start()
    print("有人来了")
    print(conn)
    print(address)
    buff = conn.recv(1024)
    print("接受的数据:%s"%buff.decode('utf-8'))

s.close()

客户端:

import socket
#创建套接字
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#连接指定端口,IP
s.connect(('127.0.0.1',3428))
#发送数据
while True:
    str = input("#:")
    if(str == ""):
        break
#print("发送数据")
    s.send(str.encode('utf-8'))
#关闭连接
s.close()

先运行服务端,再运行客户端

python做gui客户端 python写客户端界面_运维

python做gui客户端 python写客户端界面_运维_02

2.复杂的

服务端:

#通信使用的模块
import socket,threading 

def threadRecvFun(ssock):
    print("有人来了:%s"%threading.current_thread().name)
    while True:
        buff = ssock.recv(1024)
        str = buff.decode('utf-8')
        print("接受的数据:%s" % buff.decode('utf-8'))
def threadSendFun(ssock):
    while True:
        str = input("#:")
        ssock.send(str.encode('utf-8'))

# 新建套接字
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 绑定IP和端口  端口<=65535
s.bind(('127.0.0.1',3428))
# 开启监听
s.listen(5)
# 等待连接
while True:
    #一直在这里死等用户来连接
    print("等待连接")
    conn,address = s.accept()
    th1 = threading.Thread(target=threadRecvFun,args=(conn,))
    th1.start()
    th2 = threading.Thread(target=threadSendFun, args=(conn,))
    th2.start()
s.close()

客户端:

# 运行的模块
import socket,threading

def threadSendFun(ssock):
    while True:
        str = input("#:")
        ssock.send(str.encode('utf-8'))
def threadRecvFun(ssock):
    while True:
        buff = ssock.recv(1024)
        str = buff.decode('utf-8')
        print("接受的数据:%s" % buff.decode('utf-8'))

# 创建套接字
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 连接指定的IP和端口
s.connect(('127.0.0.1',3428))
# 发送数据
th1 = threading.Thread(target=threadRecvFun, args=(s,))
th1.start()
th2 = threading.Thread(target=threadSendFun, args=(s,))
th2.start()

先运行服务端,再运行客户端

服务端:

python做gui客户端 python写客户端界面_运维_03

客户端:

python做gui客户端 python写客户端界面_服务器_04

可以通过在同一局域网下或者热点下聊天。

一个可以扮演服务端,另一个可以扮演客户端。

记得把客户端的IP地址修改为服务端的IP地址。