文章目录
- **连接到服务器:**
- **一个简单的服务器客户端程序:**
- **服务器**
- **客户端**
套接字编程是一种连接网络上的两个节点以相互通信的方法。一个套接字(节点)侦听 IP 处的特定端口,而另一个套接字则伸向另一个套接字以形成连接。服务器形成侦听器套接字,而客户端则连接到服务器。
他们是网页浏览背后的真正支柱。简单来说,有一个服务器和一个客户端。
套接字编程是通过导入套接字库并创建一个简单的套接字来开始的。
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
在这里,我们制作了一个套接字实例,并向它传递了两个参数。第一个参数为AF_INET,第二个参数为SOCK_STREAM。AF_INET是指地址系列 ipv4。SOCK_STREAM表示面向连接的 TCP 协议。
现在,我们可以使用此套接字连接到服务器。
连接到服务器:
请注意,如果在创建套接字期间发生任何错误,则为套接字。错误被抛出,我们只能通过知道其IP连接到服务器。您可以使用以下命令查找服务器的IP:
$ ping www.google.com
你也可以使用python找到IP:
import socket ip = socket.gethostbyname('www.google.com')
print(ip)
输出结果:
下面是用于连接到 Google 的脚本示例。
import socket
import systry:s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)print("已成功创建套接字")
except socket.error as err:print("套接字创建失败,出现错误 %s" % (err))# 套接字默认端口
port = 80try:host_ip = socket.gethostbyname('www.google.com')
except socket.gaierror:print("解析主机时出错")sys.exit()# 连接到服务器s.connect((host_ip, port))print("套接字已成功连接到google")
运行结果:
- 首先,我们做了一个插座。
- 然后我们解决了谷歌的IP,最后,我们连接到谷歌。
- 现在我们需要知道如何通过套接字发送一些数据。
- 对于发送数据,套接字库具有 sendall 函数。此函数允许您将数据发送到套接字连接到的服务器,并且服务器还可以使用此函数将数据发送到客户端。
一个简单的服务器客户端程序:
服务器
服务器有一个 bind() 方法,该方法将其绑定到特定的 IP 和端口,以便它可以侦听该 IP 和端口上的传入请求。服务器有一个 listen() 方法,它将服务器置于侦听模式。这允许服务器侦听传入连接。最后,服务器有一个 accept() 和 close() 方法。accept 方法启动与客户端的连接,close 方法关闭与客户端的连接。
# 首先导入套接字库
import socket# 接下来创建套接字对象
s = socket.socket()
print ("已成功创建套接字")# 在您的计算机上保留一个端口在我们的情况下是12345,但可以是任何端口
port = 12345#接下来绑定到端口,我们没有在ip字段中键入任何ip,而是输入了一个空字符串,这使服务器侦听来自网络上其他计算机的请求
s.bind(('', port))
print ("套接字绑定到 %s" %(port))# 切换套接字到监听模式
s.listen(5)
print ("套接字正在侦听")# 一个永远的循环,直到我们中断它或发生错误
while True:# 与客户端建立连接。c, addr = s.accept()print ('已从获得连接', addr )# 向客户发送感谢信息。编码以发送字节类型。c.send('感谢您的连接'.encode())# 关闭与客户端的连接c.close()# 打破循环break
- 首先,我们导入套接字是必要的。
- 然后我们制作了一个套接字对象,并在我们的PC上保留了一个端口。
- 之后,我们将服务器绑定到指定的端口。传递空字符串意味着服务器也可以侦听来自其他计算机的传入连接。如果我们通过127.0.0.1,那么它将只侦听在本地计算机中进行的那些调用。
- 5 在这里,我们将服务器置于侦听模式,这意味着如果服务器繁忙,则 5 个连接将一直等待,如果第 6 个套接字尝试连接,则连接将被拒绝。
- 最后,我们进行一段时间循环,并开始接受所有传入连接,并在向所有连接的套接字发送感谢消息后关闭这些连接。
客户端
现在我们需要一些服务器可以与之交互的东西。我们可以像这样信奉服务器,只是为了知道我们的服务器正在工作。在终端中键入以下命令:
# 启动服务器
$ python server.py# 保持上述端子打开
# 现在打开另一个终端并键入:$ telnet localhost 12345
如果报以下错误:
可以在控制面板中点击启用或关闭windows功能中找到telent 客户端 并勾选 点击确定
输出:
# #在服务器中。py端子您将看到以下输出:
已成功创建套接字
套接字绑定到 12345
套接字正在侦听
Got connection from ('127.0.0.1', 52617)
# 在telnet终端中,您将看到:
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
感谢您的连接.
此输出显示我们的服务器正在工作。
现在对于客户端:
# 导入socket 模块
import socket# 船舰socket 对象
s = socket.socket()# 定义要连接的端口
port = 12345# 连接到本地计算机上的服务器
s.connect(('127.0.0.1', port))# 从服务器接收数据并解码以获取字符串。
print(s.recv(1024).decode())
# 关闭连接
s.close()
- 首先,我们制作一个套接字对象。
- 然后,我们在端口12345(运行服务器的端口)上连接到localhost,最后,我们从服务器接收数据并关闭连接。
- 现在将此文件另存为 client.py,并在启动服务器脚本后从终端运行它。
运行结果: