socket

本文详细介绍如何使用Python进行Socket编程,包括创建服务器与客户端的基本步骤,实现多线程处理多个客户端连接,以及使用socketserver模块简化服务器端编程。通过具体代码示例,读者可以深入理解TCP协议下的Socket通信机制。
摘要由CSDN通过智能技术生成

具体见笔记socket及socketservr,默认TCP,使用UDP不需要握手

服务器可接收多个:收发要同步
基本框架代码:
socket:

import  socket
import  threading
def link_handler(link,client):
    print('服务器开始接收来自[%s:%s]的请求'%(client[0],client[1]))
    while True:

        cd = link.recv(1024).decode()
        if cd == 'exit':
            print('结束[%s:%s]通讯'%(client[0],client[1]))#client[0]:ip地址,【1】端口
            break
        print('来自[%s:%s]向客户端发来的信息:%s' % (client[0],client[1] ,cd))
        link.sendall('服务器接收到消息了'.encode())

s=socket.socket()
IP_PORT=('127.0.0.1',9999)
s.bind(IP_PORT)
s.listen(5)
print('启动socket服务,等待客户端连接。。。')
while True:
    conn,address=s.accept()#连接的管道和ip地址及端口
    t=threading.Thread(target=link_handler,args=(conn,address))
    t.start()

客户端:

import socket
IP_PORT=('127.0.0.1',9999)
s=socket.socket()
s.connect(IP_PORT)
while True:
    inp=input('请输入').strip()#限制不为空
    if not inp:
        continue
    s.sendall(inp.encode())
    if inp=='exit':#正常关闭
        print('通讯结束')
        break
    sd=s.recv(1024).decode()
    print(sd)

s.close()

socketserver:
服务器:

import  socketserver
class MyServer(socketserver.BaseRequestHandler):
    def handle(self):
        conn=self.request
        conn.sendall('发送信息'.encode())#收发一致,服务器发则客户端就要有收
        while True:
            data=conn.recv(1024).decode()
            if data=='exit':
                print('断开与%s的连接'%(self.client_address))
                break
            print('来自%s的客户端发来信息:%s:'%(self.client_address,data))
            conn.sendall(('收到信息:%s'%data).encode())
if __name__ == '__main__':
    server=socketserver.ThreadingTCPServer(('127.0.0.1',9999),MyServer)
    print('启动socketserver服务器')
    server.serve_forever()

客户端:

import socket
IP_PORT=('127.0.0.1',9999)
s=socket.socket()
s.connect(IP_PORT)

while True:
    sd = s.recv(1024).decode()
    print(sd)#收发一致
    inp=input('请输入').strip()#限制不为空
    if not inp:
        continue
    s.sendall(inp.encode())
    if inp=='exit':#正常关闭
        print('通讯结束')
        break
    sd=s.recv(1024).decode()
    print(sd)

s.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值