套接字编程
简要介绍一下套接字:
Socket我们普遍称之为“套接字”,套接字是计算机网络连接最基础的数据结构,任何计算机网络之间的通讯,都需要创建套接字。应用程序通常通过使用“套接字”来向网络发出请求或者应答网络请求,这样才使得计算机之间得以实现通讯。
套接字家族有两种,一种是基于文件的(AF_UNIX),另外一种是面向网络的(AF_INET)。
套接字的类型也可以分为SOCK_STREAM和SOCK_DREAM两种,前者指的是使用传输控制协议(TCP协议),在创建TCP套接字时使用,后者指的是用户数据报协议(UDP协议),同理,在创建UDP套接字时使用。
TCP客户端
文件名:tcpclient.py
# encoding = 'utf8'
from socket import *
HOST = "www.baidu.com" #设置主机ip
PORT = 80 #配置端口号
BUFSIZ = 4096 # 4kb
ADDR = (HOST,PORT)
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #声明socket类型,同时创建socket对象
client.connect(ADDR) #连接客户端
data = "GET / HTTP/1.1\r\nHost:baidu.com\r\n\r\n"
client.send(bytes(data,'utf8')) #发送一条数据
response = client.recv(BUFSIZ) #接收一条信息
print(response)
UDP客户端
文件名:udpclient.py
import socket
HOST = '127.0.0.1'
PORT = 9999
BUFSIZ = 4096
ADDR = (HOST,PORT)
client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #建立一个socket对象
client.sendto(str.encode('AAABBBCCC'),ADDR) #发送一些数据
data,addr = client.recvfrom(BUFSIZ)
print(data)
UDP服务器
文件名:udpserver.py
import socket
HOST = '127.0.0.1'
PORT = 9999
BUFSIZ = 4096
ADDR = (HOST,PORT)
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind(ADDR)
while True:
data,addr = s.recvfrom(BUFSIZ)
print('Received from %s:%s.'% addr)
s.sendto(b'Hello,I receive:%s'% data,addr) #b: 表示二进制字符串,括号内的内容原样输出
这里添加了UDP客户端,仅供参考
TCP服务器
文件名:tcpserver.py
import socket
import threading
HOST = '0.0.0.0' #绑定到所有的网络地址
PORT = 9999
ADDR = (HOST,PORT)
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #创建socket对象
server.bind(ADDR) #绑定端口号
server.listen(5) #设置最大连接数为5
print("[*] listen on %s:%d" % ADDR)
def handle_client(client_socket): #客户端处理线程
request = client_socket.recv(1024) #打印出客户端发送得到的内容
print("[*] Received: %s" % request) #打印出接收数据
client_socket.send(str.encode('ACK!')) #返还一个数据包
client_socket.close()
while True:
client,addr = server.accept() #建立客户端连接
print("[*] Accepted connection from: %s: %d" % (addr[0],addr[1])) # 打印连接地址
client_handler = threading.Thread(target=handle_client,args=(client,)) #创建一个线程对象
client_handler.start() #启动线程
运行上述的TCP服务器与客户端将会得到如下结果:

这只是一种最基础的套接字使用范例,上述代码均经过实际验证,读者通过更改IP和端口号以及数据传输的相关控制代码可以实现不同细节的网络连接,上述使用代码中对其它博客以及相关书籍均略有参考,在此不一一举例了。浅陋文字,望各位同好者都学有所获!对上述博客还有不同意见也欢迎指点评价!
本文介绍了套接字编程的基础知识,包括套接字的类型、家族及如何使用TCP和UDP进行网络通信。提供了TCP和UDP的客户端与服务器的示例代码,展示了如何创建套接字、连接、发送和接收数据。
2835

被折叠的 条评论
为什么被折叠?



