首页 > 其他分享 >7.1 套接字(socket)

7.1 套接字(socket)

时间:2023-06-08 23:35:31浏览次数:33  
标签:socket TCP client 7.1 address close 接字

套接字(socket)是计算机之间进行通信的一种技术,它允许不同主机上的进程之间进行数据交换。在Python中,我们可以使用socket模块来创建和使用套接字。

首先,我们需要导入socket模块:

import socket

在网络编程中,有两种主要类型的套接字:流套接字(Stream Sockets)和数据报套接字(Datagram Sockets)。流套接字使用传输控制协议(TCP)进行通信,而数据报套接字使用用户数据报协议(UDP)进行通信。我们将主要关注TCP套接字,因为它们更常用且提供了可靠的双向通信。

创建套接字

要创建一个TCP套接字,我们可以使用socket.socket()函数:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

这里,socket.AF_INET表示我们使用IPv4地址,socket.SOCK_STREAM表示我们使用TCP协议。

绑定套接字

创建套接字后,我们需要将其绑定到一个地址和端口。这可以使用bind()方法完成:

address = ('localhost', 12345)
s.bind(address)

这里,我们绑定了套接字到本地地址('localhost')和端口(12345)。

监听连接

在绑定套接字后,我们需要开始监听客户端的连接。我们可以使用listen()方法来实现这一点:

s.listen(5)

这里的数字5表示允许的最大连接数。

接受连接

当有客户端尝试连接时,我们可以使用accept()方法来接受连接。这将返回一个新的套接字对象和客户端地址:

client_socket, client_address = s.accept()

发送和接收数据

现在我们已经建立了连接,可以使用send()recv()方法发送和接收数据。例如:

data = client_socket.recv(1024)  # 接收最多1024字节的数据
client_socket.send(b'Hello, client!')  # 发送数据

请注意,我们需要使用字节类型的数据进行通信。

关闭套接字

通信完成后,我们需要关闭套接字以释放资源。我们可以使用close()方法来实现这一点:

client_socket.close()
s.close()

这就是一个简单的TCP套接字服务器的基本结构。为了让您更好地理解,这里有一个完整的示例:

TCP服务器示例

import socket

def main():
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    address = ('localhost', 12345)
    s.bind(address)
    s.listen(5)

    print("Waiting for connections...")
    client_socket, client_address = s.accept()
    print(f"Connected to {client_address}")

    data = client_socket.recv(1024)
    print(f"Received: {data}")

    client_socket.send(b'Hello, client!')

    client_socket.close()
    s.close()

if __name__ == '__main__':
    main()

这个示例展示了如何创建一个简单的TCP服务器,它接受来自客户端的连接和数据,并向客户端发送一条消息。您可以根据自己的需求修改这个示例,以实现不同的功能。
推荐阅读:

https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA

https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g

file

标签:socket,TCP,client,7.1,address,close,接字
From: https://www.cnblogs.com/yaoqian/p/17467965.html

相关文章

  • web接收websocket
    data(){return{websock:null,wsuri:"ws://192.168.2.22:8025/test/fff",//WebSocket的后台地址actiones:{ssid:"fff"},//传入后台的数据};},created(){this.initWebSocket();//开启WebSocket},destroyed(......
  • CSE-111 socket编程
    Courseworkassignment“Statefulrobotusingprotobufandsockets”CSE-111Week7BackgroundWehavenowprogressedtowritingsimpleclient-serverC++applications“fromscratch”.Thisassignmentgivesyouatasteofwhat’srequiredtowriteanapplicationwh......
  • 各种数据库连接字符串
    SqlServer “DataSource=127.0.0.1;InitialCatalog=dbname;UserId=sa;Password=****;”Oracle"DataSource=127.0.0.1/dbname;port=1521;UserId=orcl;Password=***'*;"DB2"Server=127.0.0.1:50000;Database=dbname;UID=DBADM;PWD=****;"M......
  • 7.17 其他操作方法
    demo1concatStringstrA="www.mldn.cn";StringstrB="www.".concat("mldn").concat(".cn");System.out.println(strB);System.out.println(strA==strB);//和php不同,这里是:falsedemo2......
  • 一文搞懂TCP、HTTP、Socket、Socket连接池
    一文搞懂TCP、HTTP、Socket、Socket连接池架构师社区 2023-06-0711:40 发表于北京作者:数澜科技来源:www.jianshu.com/p/e47a766e03da前言:作为一名开发人员我们经常会听到HTTP协议、TCP/IP协议、UDP协议、Socket、Socket长连接、Socket连接池等字眼,然而它们之间的关系......
  • 一文搞懂TCP、HTTP、Socket、Socket连接池
    前言:作为一名开发人员我们经常会听到HTTP协议、TCP/IP协议、UDP协议、Socket、Socket长连接、Socket连接池等字眼,然而它们之间的关系、区别及原理并不是所有人都能理解清楚,这篇文章就从网络协议基础开始到Socket连接池,一步一步解释他们之间的关系。七层网络模型首先从网络通信的......
  • 7.16 字符串格式化
    formatpublicclassHelloWorld{publicstaticvoidmain(Stringargs[]){Stringname="张三";intage=19;doublescore=8.8;Stringstr=String.format("姓名:%s,年龄:%d,成绩:%5.2f",name,age,score);......
  • 7.15 字符串的截取
    substring,经常结合indexOf,lastIndexOf使用,Stringstr="www.mldn.cn";System.out.println(str.substring(4));//4之后都截取System.out.println(str.substring(4,8));//截取4-8,和php不同,后面的参数不是截取的长度;......
  • 7.14 字符串拆分
    splitpublicclassHelloWorld{publicstaticvoidmain(Stringargs[]){Stringstr="helloworldhellomldn";//split按照指定字符串全部拆分//Stringresult[]=str.split("");//for(intx=0;x......
  • 7.12 字符串查找
    containsindexOf,lastIndexOf,startsWith,endWithpublicclassHelloWorld{publicstaticvoidmain(Stringargs[]){//Stringargs[]字符串数组的意思Stringstr="www.mldn.cn";System.out.println(str.contains("mldn"));//tru......