python 指南(14)网络编程

本文详细介绍并演示了使用Python进行TCP与UDP Socket编程的方法。包括服务器端与客户端的建立、连接、数据收发及断开流程。通过具体代码实例,展示了如何利用线程处理多个客户端连接,并实现数据的高效传输。

TCP编程

  • 用TCP协议进行Socket编程在Python中十分简单,对于客户端,要主动连接服务器的IP和指定端口
  • 对于服务器,要首先监听指定端口,然后,对每一个新的连接,创建一个线程或进程来处理
  • 通常,服务器程序会无限运行下去

一、服务端

import socket
import threading, time

server = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
server.bind(("127.0.0.1", 9999))
server.listen(5)
print('wait client to connect......')


def dealTcp(sock, addr):
    print('a new socket connect is comming...%s:%s' % addr)
    sock.send(b'welcome')
    while True:
        data = sock.recv(1024)
        time.sleep(1)
        if not data or data.decode('utf-8') == 'exit':
            break
        sock.send(b'hello %s' % data.decode('utf-8').encode('utf-8'))
    sock.close()
    print('connect from %s:%s is closed' % addr)


while True:
    sock, addr = server.accept()
    t = threading.Thread(target=dealTcp, args=(sock, addr))
    t.start()

二、客户端

import socket

client = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
client.connect(('127.0.0.1', 9999))

print('msg from server:%s' % client.recv(1024).decode('utf-8'))

for name in [b'allen', b'mike', b'helln', ]:
    client.send(name)
    print('msg from server:%s' % client.recv(1024).decode('utf-8'))

client.send(b'exit')
client.close()

三、发送get请求获取网页


UDP编程

一、服务端

import socket

s = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)
s.bind(('127.0.0.1', 9999))

while True:
    data, addr = s.recvfrom(1024)
    print('msg from %s:%s--' % addr + data.decode())
    s.sendto(b"hello %s" % data, addr)

二、客户端

import socket, time

s = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)
for name in [b'allen', b'mikre', b'haha', ]:
    s.sendto(name, ('127.0.0.1', 9999))
    data, addr = s.recvfrom(1024)
    time.sleep(3)
    print('msg from %s:%s--' % addr + data.decode())

s.close()


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值