创建Socket

本文介绍如何使用Python的Socket模块创建TCP/IP和UDP/IP Socket对象,包括服务器和客户端的基本设置及通信流程。通过简单的示例代码,帮助读者理解Socket编程的基本概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python中的Socket模块中的Socket()函数可以帮助我们创建手机

格式

手机 = socket(机型, 连接方式, protocol = 0)

机型:老人机(AF_UNIX), 智能机(AF_INET)
连接模式: 高清模式(SOCK_STREAM), 流畅模式(SOCK_DGRAM)
protocol一般不填,默认值为0

现在我们来创建一个TCP/IP Socket 对象

from socket import *
tcpSocket = socket(AF_INET, SOCK_STREAM)

创建一个UDP/IP Socket 对象

from socket import *
udpSocket = socket(AF_INET, SOCK_DGRAM)

所谓的Socket对象就是手机,电话号码就是主机的IP和Port。之后服务器和客户端的交流就靠这个手机来联系

创建一个TCP服务器

伪代码

from socket import *

电话 = socket()        #创建一个服务电话
电话.bind(HOST, PORT)   #将电话绑定到服务器上(座机)
电话.listen()           #一次最多接待客户次数

listen_loop:              #永不停歇地等待客户的联系 

    # 联系到一个客户后将连接线路转给下属来处理,服务器继续等待其他客户的连接
    连接线路1 = 电话.accept()
    comm_loop:            #通信循环
        data = 连接线路1.recv(缓冲区大小) #获取客户的请求
        连接线路1.send(....data)  #对请求进行处理后再发给客户

上面的recv()函数接收一个缓冲区大小的参数。因为服务器是从缓冲区接收客户端的数据的。至于什么是缓冲区?为什么要有这个?下一章会讲到。

创建一个TCP客户端

from socket import *

客户电话 = socket()       #创建电话

#不用绑定,因为客户只要有电话就行,偷的抢的都不重要,你只要有手机能打的通就行

客户电话.connect(服务器的HOST,PORT) #打过去,和服务器建立联系

comm_loop:        #开始对话
    客户电话.send()/recv()  #发送或接收数据
客户电话.close()   #挂电话
客户端创建Socket通常是在网络编程中,特别是在TCP/IP通信时,用于建立客户端与服务器之间的连接。以下是客户端创建Socket的基本步骤: 1. **导入必要的库**:首先,你需要在Java程序中导入`java.net.Socket`和`java.io.IOException`等相关的库。 ```java import java.io.*; import java.net.*; ``` 2. **创建Socket对象**:然后,创建一个Socket实例,指定主机名(通常是服务器地址)和端口号。如果未提供默认端口,你需要提供完整的URL形式(如`localhost:8080`)。 ```java Socket socket = new Socket("localhost", 8080); ``` 3. **设置超时**:可以设置Socket的SO_TIMEOUT属性来设置等待响应的时间,防止因为长时间无响应而阻塞。 ```java socket.setSoTimeout(5000); // 例如5秒后关闭连接 ``` 4. **获取输入/输出流**:通过Socket对象获取InputStream和OutputStream,用于发送数据到服务器或接收服务器的回应。 ```java BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter writer = new PrintWriter(socket.getOutputStream(), true); ``` 5. **进行通信**:使用输入流读取数据,输出流发送请求,处理异常,并在完成操作后关闭Socket。 ```java String response; try { response = reader.readLine(); System.out.println("Received: " + response); // 发送数据 writer.println("Client message"); } catch (IOException e) { e.printStackTrace(); } finally { try { reader.close(); writer.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值