python tcp 服务器端+客户端


1、最简单的服务端和客户端

服务端代码

import socket                    #网络编程需要用到socket模块

server = socket.socket()         #创建一个用于监听连接的Socket对像(服务器端) 
server.setblocking(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) #解决服务重启时报address already in use
server.bind(('127.0.0.1', 9001)) #设置服务端的ip和端口号
server.listen()                  #开始监听

conn, addr = server.accept()     #接受服务器端发出的消息和地址信息
c_info = conn.recv(1024)         #将接受的消息存入到c_info变量中
print(c_info)
conn.send(b'hello word')         #向客户端发出消息
conn.close()                     #关闭连接
server.close()                   #关闭服务端

 

客户端代码

import socket                        #网络编程需要用到socket模块

client = socket.socket()             #创建一个客户端
client.connect(('127.0.0.1', 9001))  #连接服务端

client.send(b'nice to meet you')     #向服务端发消息
s_info = client.recv(1024)           #接受服务端发来的消息
print(s_info)
client.close()                       #关闭客户端

2、可交互的服务端和客服端

 服务端代码

import socket

server = socket.socket()
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind(('127.0.0.1', 9001))
server.listen()

conn, addr = server.accept()
while True:
    info=input('>>>')                        #输入数据,编码并发送给客户端
    info=info.encode('utf-8')                
    conn.send(info)                          
    c_info = conn.recv(1024).decode('utf-8') #接受客户端消息并解码
    print(c_info)
    if c_info == 'bye':                      #当客户端发送bye时,服务端给客户端发送bye并结束循环
        conn.send(b'bye')
        break
conn.close()
server.close()

客户端代码

import socket

client = socket.socket()
client.connect(('127.0.0.1', 9001))
while True:
    s_info = client.recv(1024)               #接受服务端的消息并解码
    s_info = s_info.decode(encoding='utf-8')
    print(s_info)
    if s_info == 'bye':                     #如果服务端发送的消息为bye,回复bye,结束循环
        client.send(b'bye')
        print('bye_1')
        break

    info = input('>>>')                     #输入数据,编码并发送给服务端
    info = info.encode('utf-8')
    client.send(info)
client.close()

总结:无论是服务端和客户逻辑是怎样的,服务端和客户端收发要对应。

3、一个服务端+多个客户端:

服务端代码

import socket

server = socket.socket()
server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
server.bind(('127.0.0.1',9002))
server.listen()
#while语句作用:(当客户端关闭后)接受新客户端的连接,实现服务端不间断地提供服务。
while True:
    conn,addr = server.accept()
    #while语句作用:接受来自客户端的消息、打印,回复消息;当客户端的消息中包含‘bye’时,断开本次连接。
    while True:
        msg = conn.recv(1024).decode('utf-8')
        print(msg)
        if 'bye' in msg:      #当收到的信息包含bye,给客户端发送bye,跳出当前while循环
            conn.send(b'bye')
            break
        info = input('>>>').encode('utf-8')
        conn.send(info)
conn.close()

server.close()

客户端1代码

import socket

client_01 = socket.socket()
client_01.connect(('127.0.0.1',9002))
while True:
    info = input('>>>').encode('utf-8')
    client_01.send(b'from c1:'+info)
    msg = client_01.recv(1024).decode('utf-8')
    print(msg)
    if msg == 'bye':  #当收到bye时,给服务器回复bye,跳出循环。
        client_01.send(b'bye')
        break
client_01.close()

客户端代码2

import socket

client_02 = socket.socket()
client_02.connect(('127.0.0.1',9002))
while True:
    info = input('>>>').encode('utf-8')
    client_02.send(b'from c2:'+info)
    msg = client_02.recv(1024).decode('utf-8')
    print(msg)
    if msg == 'bye':    #当收到bye时,给服务器回复bye,跳出循环。
        client_02.send(b'bye')
        break
client_02.close()

 

 

代码亲测过,只写了逻辑实现,改进空间很大,请多指点。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM