网络编程

博客介绍了client1和client2的代码,阐述了UDP协议的特点,如能同时与多个客户端通信,在UDP的server下无需监听和建立连接,启动服务后被动等待客户端消息,客户端发消息自带地址信息,server回复消息需带上对方地址。
# 网络编程
# arp协议:通过ip找mac地址
# ip:一台计算机在网络上的位置
# 端口号:网络相关的程序才需要开一个端口,为的是能找到某台计算机上唯一的一个程序
# 在同一台计算机上,同一时间,只有一个程序占用同一个端口
# 一般情况下,8000以后
# tcp协议 udp协议
# tcp:可靠的,面向连接的,耗时长
# 三次握手
# 四次挥手
# udp:不可靠,无连接,效率高

# IP协议属于网络osi七层协议中的 网络层
# TCP协议和udp协议属于 传输层
# arp协议属于 数据链路层

###########################################################################################
socket:

tcp协议:当有两个客户端和服务器通信时,服务器只能和一个保持连接,和其中一个断开以后再与另一个连接
server代码
import socket
sk = socket.socket()
sk.bind(('127.0.0.1',8080))
sk.listen(0)
while True:
    conn,addr = sk.accept()
    while True:
        ret = conn.recv(1024).decode('utf-8')
        print(ret)
        if ret == 'bye':
            break
        info = input('>>>')
        if info == 'bye':
            conn.send(b'bye')
            break
        conn.send(info.encode('utf-8'))
conn.close()
sk.close()
server

 client1代码:

import socket
sk = socket.socket()
sk.connect(('127.0.0.1',8080))
while True:
    info = input('>>>')
    if info == 'bye':
        sk.send(b'bye')
        break
    sk.send(('client2:'+info).encode('utf-8'))
    ret = sk.recv(1024).decode('utf-8')
    print(ret)
    if ret == 'bye':
        sk.send(b'bye')
        break
sk.close()
client1

client2代码:

import socket
sk = socket.socket()
sk.connect(('127.0.0.1',8080))
while True:
    info = input('>>>')
    if info == 'bye':
        sk.send(b'bye')
        break
    sk.send(('client2:'+info).encode('utf-8'))
    ret = sk.recv(1024).decode('utf-8')
    print(ret)
    if ret == 'bye':
        sk.send(b'bye')
        break
sk.close()
client2

 

 

udp协议:能同时与多个客户端通信

udp的server下,不需要进行监听也不需要建立连接

在启动服务之后只能被动的等待客户端发送消息过来

在客户端发送消息的时候会自带地址信息

消息回复的时候 不仅需要发送消息,还需要把对方的地址发过去

server端

import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
sk.bind(('127.0.0.1',8080))
while True:
    msg,addr = sk.recvfrom(1024)
    print(addr)
    print(msg.decode('utf-8'))
    info = input('>>>').encode('utf-8')
    sk.sendto(info,addr)

sk.close()
server

client1端

import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
ip_port = ('127.0.0.1',8080)
while True:
    info = input('>>>')
    info = ('\033[31m来自1号选手的消息:{}\033[0m'.format(info)).encode('utf-8')
    sk.sendto(info,ip_port)
    msg,addr = sk.recvfrom(1024)
    print(msg.decode('utf-8'))

sk.close()
client1

client2端

import socket
sk = socket.socket(type=socket.SOCK_DGRAM)
ip_port = ('127.0.0.1',8080)
while True:
    info = input('>>>')
    info = ('\033[32m来自1号选手的消息:{}\033[0m'.format(info)).encode('utf-8')
    sk.sendto(info,ip_port)
    msg,addr = sk.recvfrom(1024)
    print(msg.decode('utf-8'))

sk.close()
client2

 

转载于:https://www.cnblogs.com/Mr-Feng/p/10883728.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值