套接字

套接字

返回首页

客户端/服务器架构

Server端:

  1、要一直提供服务。

  2、要绑定一个唯一的地址,让客户端能都明确的找到。

基于网络通讯的套接字分为TCP协议工作的和UDP协议工作的。

TCP协议工作:

服务端:

import socket
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #买手机 AF_INET基于网络通讯的套接字,SOCK_STREAM基于TCP协议的套接字
phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) #就是它,在bind前加,SO_REUSEADDR是重置
phone.bind(('127.0.0.1',8080)) #绑定手机卡,服务端ip

phone.listen(5) #开机  ?5
print('starting....')

while True: #链接循环
    conn,addr=phone.accept() #等待电话链接
    print('电话线路是',conn)
    print('客户端的手机号是',addr)

    while True: #通信循环
        try: #应对windows系统
            data=conn.recv(1024) #收消息  ?1024
            if not data:break #linux系统
            print('客户端发来的消息是',data)
            conn.send(data.upper()) #发给客户端的消息
        except Exception:
            break
    conn.close()

phone.close()

客户端

import socket
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.connect(('127.0.0.1',8080))

while True: #通信循环
    msg=input('>>: ').strip()
    if not msg:continue
    phone.send(msg.encode('utf-8'))  #发送的
    print('has send===========>',msg)
    data=phone.recv(1024) #收到的
    print('has recv===========>',data)
    print(data)

phone.close()

UDP协议工作的套接字:

  UDP用户数据报协议,是无连接的,面向消息的,提供高效率服务,不会使用块的合并优化算法,由于UDP支持的是一对多的模式,所以接收端的skbuff(套接字缓冲区)采用了链式结构来记录每一个到达的UDP包,在每个UDP包中就有了消息头(消息来源地址,端口等信息),这样,对于接收端来说,就容易进行区分处理了,即面向消息的通信是有消息保护边界的。

Server端:

import socket

udpserver=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
udpserver.bind(('127.0.0.1',8080))

while True: #通讯循环
    data,client_addr=udpserver.recvfrom(1024)
    print('======>',data.decode('utf-8'))
    print(client_addr)
    msg=input('>>: ')
    # udpserver.sendto(data.upper(),client_addr)
    udpserver.sendto(msg.encode('utf-8'),client_addr)

Client端:

import socket

udpclient=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

server_ip_port=('127.0.0.1',8080)
while True:
    inp=input(">>: ")
    udpclient.sendto(inp.encode('utf-8'),server_ip_port)

    data,server_addr=udpclient.recvfrom(1024)
    print(data.decode('utf-8'))

---------- END ----------

原文地址:https://www.cnblogs.com/george92/p/14864376.html