首页 > 编程语言 >socket编程

socket编程

时间:2023-10-16 19:57:34浏览次数:30  
标签:socket AF 编程 server client data 服务端

1. 什么是socket编程

socket编程简介:
    能够唯一标示网络中的进程后,它们就可以利用Socket进行通信了,什么是Socket呢?我们经常把Socket翻译为套接字,Socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信

基于文件类型的套接字家族:
    # 套接字家族的名字:AF_UNIX

基于网络类型的套接字家族
    # 套接字家族的名字:AF_INET

 

2.  基于TCP协议的套接字(socket)编程

1. 客户端和服务端应该是谁先发消息、
    # 客户端先发消息 但是需要先启动服务端

2. 服务端代码
import socket
from socket import AF_INET

server = socket.socket(family=AF_INET,type=socket.SOCK_STREAM)

# 基于什么网络 接收或发送的 两种方式
# AF_INET, type=SOCK_STREAM: 基于TCP协议的
# AF_INET, type=SOCK_DGRAM: 基于UDP协议的

# 绑定IP地址和端口号
server.bind(('127.0.0.1',8000))

# 服务端监听 也称为半连接池 就是同时能接收但是用户的访问
server.listen(5)

# 接收用户发送过来的消息
while True:
        sock,addr = server.accept()
        """sock:当前链接的客户端的链接, addr:就是客户端的地址:ip,port"""
        while True:
            try:
                # 想拿到用户发送过来的数据
                data = sock.recv(1024)  # 接收的数据类型是bytes类型,二进制的 1024 代表接收的最多的字节数
                print("接收客户端的数据:",data)
                abc_str = 'love'
                # 要给用户返回的数据
                sock.send((data + b'love').upper()) # 返回的数据也必须是字节类型
            except Exception as e:
                print(e)
                break
        # 关闭客户连接
        sock.close()
# 关闭服务端连接
server.close()


3. 客户端代码
import socket

from socket import AF_INET

# 服务端是UDP协议 客户端的传输发送要一样
client = socket.socket(family=AF_INET,type=socket.SOCK_STREAM)

# 第一个是服务端的 IP地址,第二个是 端口号
client.connect(('127.0.0.1',8000))

# 开始给服务端发送消息
while True:
    cmd = input("输入发送的内容>>>:").strip()

    # 开始给服务端发送消息
    client.send(cmd.encode()) # 只能发送二进制

    # 接收服务端回复的消息
    data = client.recv(1024) # 代表回复的最大字节

    print("服务端发来的消息:", data)

# 关闭客户端
client.close()

3. 基于UDP协议的套接字编程

"""客户端"""
import socket

client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  # 数据报协议-》UDP

while True:
    msg = input('>>: ').strip()  # msg=''
    client.sendto(msg.encode('utf-8'), ('127.0.0.1', 8080))
    data, server_addr = client.recvfrom(1024)
    print(data)

client.close()

"""服务端"""
import socket

server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  # 数据报协议-》UDP
server.bind(('127.0.0.1', 8080))

while True:
    """client_addr: 客户端的地址"""
    data, client_addr = server.recvfrom(1024) # 接收的最大字节数
    print('===>', data, client_addr)
    server.sendto(data.upper(), client_addr)

server.close()

 

 

 

标签:socket,AF,编程,server,client,data,服务端
From: https://www.cnblogs.com/lchengshao/p/17768206.html

相关文章

  • 实验2 C语言分支与循环基础应用编程
    一、实验目的能正确使用if语句、switch语句实现分支结构能正确使用while语句、do...while语句、for语句实现循环结构能在具体问题场景中使用嵌套分支语句和嵌套循环语句能在具体问题场景中正确区分、使用continue和break能灵活、组合使用c语句编程解决简单应用问题二、实......
  • 实验2 C语言分支与循环基础应用编程
    练习1#include<stdio.h>#include<stdlib.h>#include<time.h>#defineN5#defineN1374#defineN2465intmain(){intnumber;inti;srand(time(0));//以当前系统时间作为随机种子for(i=0;i<N;++i){number=rand()%(N2-N1......
  • 实验2_C语言分支与循环基础应用编程
    1.task_11#include<stdio.h>2#include<stdlib.h>3#include<time.h>45#defineN56#defineN13747#defineN246589intmain()10{11intnumber;12inti;1314srand(time(0));1516for......
  • 14.8 Socket 一收一发通信
    通常情况下我们在编写套接字通信程序时都会实现一收一发的通信模式,当客户端发送数据到服务端后,我们希望服务端处理请求后同样返回给我们一个状态值,并以此判断我们的请求是否被执行成功了,另外增加收发同步有助于避免数据包粘包问题的产生,在多数开发场景中我们都会实现该功能。Sock......
  • 什么才算是真正的编程能力?
    大家好,我是陶朱公Boy,一个认真生活,总想超越自己的程序员。前言知乎上有一个提问:什么才算是真正的编程能力?             ↓↓↓今天,我们就这个话题,一起来做个讨论。首先问大家一个问题:程序员的你觉得编程能力强可以有哪些指标来衡量?是能从0-1......
  • ABB机器人示教器中设置可编程按钮
    ABB机器人是一种在工业自动化中广泛使用的机器人,具有高效率、高精度、高可靠性等优点,已经成为现代制造业的重要装备之一。为了方便操作,ABB机器人示教器中设置了可编程按钮,通过设置这些按钮,可以将复杂的操作简化成一键操作的效果,从而提高生产效率。下面,我们来详细介绍如何在ABB......
  • uniGUI使用WebSocket
    现在的uniGUI最新版本,经过几个版本的迭代,已经完美支持WebSocket。用起来,也非常简单,默认情况下,已经打开WebSocket。打开demos中的第一个例子: C:\ProgramFiles(x86)\FMSoft\Framework\uniGUI\Demos\Desktop\WebSocket-Basic在Main单元,可以看到:1.如何广播一个消息:BroadcastM......
  • 实验1 类和对象编程_基础编程1
    实验任务1task1.cpp//标准库string,vector,array基础用法#include<iostream>#include<string>#include<vector>#include<array>//函数模板//对满足特定条件的序列类型T对象,使用范围for输出template<typenameT>voidoutput1(constT&obj){for(aut......
  • 【Linux 网络编程】为什么 IP 地址通常以192.168开头?——私有 IP 地址段
    首先,192.168并不是设置局域网IP地址的唯一选择。很多企业都选择10.或者172.16开头规划局域网。三个私有IP地址段网络中的主机需要通信,需要使用一个IP地址,目前我们普遍使用的IPv4的地址,分为A、B、C、D、E五类,其中A、B、C类是我们常见的IP地址段。在这三类地址中,大多数为公有地......
  • Qt/C++编写物联网组件/支持modbus/rtu/tcp/udp/websocket/mqtt/多线程采集
    一、功能特点支持多种协议,包括Modbus_Rtu_Com/Modbus_Rtu_Tcp/Modbus_Rtu_Udp/Modbus_Rtu_Web/Modbus_Tcp/Modbus_Udp/Modbus_Web等,其中web指websocket。支持多种采集通讯方式,包括串口和网络等,可自由拓展其他方式。自定义采集间隔(精确到毫秒)和超时次数,超时后自动将离线的文件......