python下的socket编程

虽说语言变成了python,但是socket的基本框架还是在的。首先,我们还是要看一下UNIX环境下的TCP框架




接着直接来看程序,打开你的IDLE,我们先来看server端:

import socket           # 导入socket库
import time             # 导入time库
HOST = 'localhost'        # 连接本地服务器
PORT = 8001               # 设置端口号
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)       # 选择IPv4地址以及TCP协议
sock.bind((HOST, PORT))          # 绑定端口
sock.listen(5)                   # 监听这个端口,可连接最多5个设备
while True:  
    connection, address = sock.accept()              # 接受客户端的连接请求
    try:  
        connection.settimeout(10)                      # 设置10s时限
        buf = connection.recv(1024)                    # 接收数据实例化
        if buf:                                 # 接收成功
            print('connection success!')
            connection.send(b'welcome to server!')        # 发送消息,b为bytes类型
        else:                                   # 接收失败
            connection.send(b'please go out!')  
    except socket.timeout:                      # 超时
        print ('time out')
connection.close()                  # 关闭连接


再看client端,比server端更简单:

import socket
import time

HOST = 'localhost'
PORT = 8001
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
sock.connect((HOST, PORT))  
time.sleep(2)  
sock.send(b'1')          # 发送信息
print (sock.recv(1024).decode())        # 打印接收消息,并且译码
sock.close()                      #关闭连接


然后我们先运行server端,让其处于等待接收的状态

接着运行client端,我们分别来看两个IDLE窗口的运行结果




既然复杂的TCP我们都可以写了,那UDP就更不在话下了。

我们只要在原来的代码上进行修改就行:

server端:

import socket  


HOST = 'localhost'
PORT = 8001
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((HOST, PORT))  
while True:
    buf, address = sock.recvfrom(1024)  
    if buf:
        print('connection success!')
        sock.sendto(b'welcome to server!',address)  
    else:  
        sock.sendto(b'please go out!',address)  
sock.close()   

client端:

import socket
import time

HOST = 'localhost'
PORT = 8001
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  
sock.connect((HOST, PORT))  
time.sleep(2)  
sock.send(b'1')
print (sock.recv(1024).decode())
sock.close()  

c语言的socket编程版本请看我之前的博客。




猜你喜欢

转载自blog.csdn.net/weixin_41656968/article/details/80033617
今日推荐