“Socket库是网络通信编程的基石,提供了强大的接口用于实现客户端与服务器之间的数据交换,是构建网络应用程序不可或缺的工具。”
前言
Socket库是一种强大的网络编程接口,它提供了在计算机网络上建立连接、发送和接收数据的函数和类。支持多种编程语言,如Python、C、C++等,广泛应用于实现客户端与服务器之间的通信。Socket库基于TCP/IP协议栈,允许程序之间通过套接字对象进行数据传输,是构建分布式系统、网络服务和实时应用的核心技术之一。
当然,Socket库不仅简化了网络编程的复杂性,还提供了灵活性,允许开发者自定义通信协议以满足特定需求。通过Socket库,可以构建从简单的聊天应用到复杂的Web服务器和客户端程序等多种类型的网络应用。它是网络世界中的基石,让数据能够在全球范围内无缝流通。
本文将介绍其用法。
一、基本用法
1.创建socket
首先,需要创建一个 socket 对象。可以使用 socket.socket()
函数来创建:
import socket
# 创建一个 TCP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.AF_INET
表示使用 IPv4 地址族。socket.SOCK_STREAM
表示使用 TCP 协议。
2.绑定地址和端口
服务器端需要绑定一个地址和端口,以便客户端可以连接。
server_address = ('localhost', 10000)
sock.bind(server_address)
3.监听连接
服务器端需要监听连接请求。
sock.listen(5)
这里的 5
表示允许的最大连接数。
4. 接受连接
服务器端接受客户端的连接请求。
connection, client_address = sock.accept()
accept()
方法会返回一个新的 socket 对象和客户端地址。
5. 发送和接收数据
使用 send()
和 recv()
方法来发送和接收数据。
# 发送数据
connection.sendall(b'Hello, client!')
# 接收数据
data = connection.recv(1024)
print('Received:', data.decode())
6.关闭连接
使用 close()
方法关闭连接。
connection.close()
sock.close()
二.代码实例
一.TCP客户端
import socket
host = '127.0.0.4'
port = 8007
def main():
while True:
try:
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((host, port))
r = client.recv(4096)
result = eval(r.decode('utf-8'))
print(result)
client.send(b'[*] \xe6\x88\x90\xe5\x8a\x9f\xe6\x89\xa7\xe8\xa1\x8c!')
except Exception as e:
print('[?]')
wroung = f'错误信息: {e}'
client.send(b'[?] \xe5\xa4\xb1\xe8\xb4\xa5!' + wroung.encode())
if __name__ == "__main__":
main()
二.TCP服务端
import socket
import threading
IP = "0.0.0.0"
PORT = 4446
def main():
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((IP, PORT))
server.listen(5)
print(f'[*] 正在监听:{IP}:{PORT}')
while True:
client, address = server.accept()
print(f"[*] 从{address[0]}:{address[1]}接收连接") # address[1]为客户端端口号,address[0]为客户端IP地址
client_handler = threading.Thread(target=handle_client, args=(client,))
client_handler.start()
def handle_client(client_socket):
with client_socket as sock:
while True:
request = sock.recv(1024)
if not request:
break
print(f'[*] 得到的:{request.decode("utf-8")}')
sock.send(
b'\xe5\x91\xb5\xe5\x91\xb5\xef\xbc\x8c\xe4\xbd\xa0\xe5\xb7\xb2\xe8\xa2\xab\xe7\x9b\x91\xe6\x8e\xa7')
if __name__ == "__main__":
main()
三.总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。