在Python使用socket模块socket函数可以完成语法格式如下

s=socket.socket(AddressFamily, Type)

函数socket.socket创建一个socket,返回socket的描述符。该函数带有两个参数。

socket对象的内置方法

方法 描述
s.bind() 绑定地址(host,port)到套接字,在AF_INET下以元组(host,port)的形式表示地址
s.listen() 开始TCP监听backlog指定拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为1,大部分应用程序设为5即可
s.accept() 被动接受TCP客户端连接,(阻塞式)等待连接的到来。
s.connect() 主动初始化TCP服务器连接,一般address格式元组(hostname,port),如果连接出错返回socket,error错误
s.recv() 接收TCP数据,以字符串形式返回bufsize指定接收最大数据量flag提供有关消息的其他信息,通常可以忽略
s.send() 发送TCP数据,将string中的数据发送连接的套接字。返回值是要发送字节数量,该数可能小于string字节大小
s.sendall() 完整发送TCP数据,将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据成功返回Node失败抛出异常
s.recvfrom() 接收UDP数据。与recv()类似,但返回值是(data,address)元组。其中data包含接收数据的字符串address发送数据的套接字地址
s.sendto() 发送UDP数据,将数据发送到套接字。address是形式为(ipaddr,port)的元组指定远程地址。返回值是发送的字节
s.close() 关闭套接字

创建TCP服务器

完成一个TCP服务器功能需要流程如下

创建一个server.py文件代码如下

import socket                                               #导入socket模块
host='127.0.0.1'                                            #主机IP
port=8080                                                   #端口号
web=socket.socket()                                         #创建socket对象
web.bind((host,port))                                       #绑定端口
web.listen(5)                                               #设置最多连接数
print('服务器等待客户端连接...')
#开户死循环
while True:
    conn,addr=web.accept()                                  #建立客户端连接
    data=conn.recv(1024)                                    #获取客户请求数据
    print(data)                                             #打印收到的数据
    conn.sendall(b'HTTP/1.1 200 OKrnrnHello World')     #向客户发送数据
    conn.close()                                            #关闭连接

创建一个client.py文件,代码如下

import socket
s=socket.socket()
host='127.0.0.1'
port=8080
s.connect((host,port))
send_data=input("请输入要发送的数据:")
s.send(send_data.encode())
#接收对方发送过来的数据,最大接收1024个字节
recvData=s.recv(1024).decode()
print('接收到的数据为:',recvData)
#关闭套接字
s.close()

制作简易聊天窗口

创建server.py文件,作为服务器程序代码如下

import socket
host=socket.gethostname()
port=12345
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((host,port))
s.listen(1)
sock,addr=s.accept()
print('连接已经建立')
info=sock.recv(1024).decode()
while info!='byebye':
    if info:
        print('接收到内容:'+info)
    send_data=input('输入发送内容:')
    sock.send(send_data.encode())
    if send_data=='byebye':
        break
    info=sock.recv(1024).decode()
sock.close()
s.close()

创建client.py文件,作为客户端程度,代码如下

import socket
s=socket.socket()
host=socket.gethostname()
port=12345
s.connect((host,port))
print('已连接')
info=''
while info!='byebye':
    send_data=input('输入发送内容:')
    s.send(send_data.encode())
    if send_data=='byebye':
        break
    info=s.recv(1024).decode()
    print('接收到的内容:'+info)
s.close()

UDP

不同于TCP协议,UDP协议是面向无连接的协议。

使用UDP协议时,不需要建立链接,只需要知道对方的IP地址和端口号,就可以直接数据包。但是,数据无法保证一定到达。

虽然用UDP传输数据可靠,但它的优点是比TCP协议速度快。

对于不要求可靠到达的数据,就可以使用UDP协议。

UDP是面向消息的协议,通信时不需要建立连接,数据的传输自然是不可靠的。

UPD一般用于多点通信实时的数据业务

创建UDP服务

创建udp_server.py文件,代码如下

import socket

s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind(('127.0.0.1',8888))
print('绑定UDP到8888端口')
data,addr=s.recvfrom(1024)
data=float(data)*1.8+32
send_data='转换后的温度单位:华氏温度):'+str(data)
print('Received from %s:%s.'%addr)
s.sendto(send_data.encode(),addr)
s.close()

创建UDP客户端

创建一个UDP客户端的流程步骤如下:

import socket

s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
data=input('请输入要转换的温度(单位:摄氏温度):')
s.sendto(data.encode(),('127.0.0.1',8888))
print(s.recv(1024).decode())
s.close()

原文地址:https://blog.csdn.net/DXB2021/article/details/134806251

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_48658.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注