tcp套接字socket编程

套接字:进行网络通信的一种手段,socket

流式套接字(SOCK_STREAM):传输层基于tcp协议进行通信

数据报套接字(SOCK_DGRAM):传输层基于udp协议进行通信

原始套接字:访问底层协议的套接字

 

流式套接字:

TCP服务端

from socket import *

1、创建套接字

socket(scoket_family=AF_INET,socket_type=SOCK_STREAM,proto=0)

功能:创建套接字

参数:socket_family:选择地址族种类AF_INT(UNIX)

           socket_type:套接字类型SOCK_STREAM(流式),SOCK_DGRAM数据报

            proto:子协议类型默认为0

返回值:返回创建的套接字

2、绑定IP和端口号

sockfd.bind()

功能:绑定IP和端口

参数:是一个元组,第一项是字符串形式的IP,第二项是端口号

           ('192.168.1.2',8888)

3、让套接字具有监听功能

sockfd.listen(n)

功能:使套接字变为监听套接字,同时创建监听队列

参数:n监听队列大小

 

4、等待客户端连接

socket.accept()

功能:阻塞等待客户端连接

返回值:第一个:返回一个新的套接字用来和客户端通信

               第二个:返回连接的客户端的地址

5、消息的收发

recv(buffer)

功能:接受消息

参数:一次接受消息的大小 字节

返回值:接受到的内容 

send()

功能:发送消息

参数:发送的内容(byte)

返回值:发送了多少个字节

6、关闭套接字

close()

功能:关闭套接字

tcp客户端流程

1、创建流式套接字

2、发起连接请求

connect()

功能:发起连接

参数:一个元组 第一个元素:服务器的IP,第二个元素:服务器的port

3、收发消息

4、关闭套接字

 

关于recv和send

发送接受缓冲区:发送和接收消息均放到缓冲区再进行处理

recv接收消息当一次接受不完的时候会下次继续接收

当recv阻塞时,如果客户端断开,则recv立即返回一个空字符串

tcp粘包处理

tcp中数据以数据流的方式发送接收,每次发送的数据间没有边界,在接收时可能造成数据的粘连即使为粘包

粘包如何处理:

1、每次发送消息结束位置加标志

2、发送的消息添加结构描述

3、当连续发送时每次发送有一个短暂延迟sleep(0.1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TCP编程是一种网络编程技术,用于在计算机网络中建立TCP并进行数据传输。下面是一个简单的示例,展示了如何使用Python的socket库进行TCP编程: ```python import socket # 创建一个TCP sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定套到特定的IP地址和端口号 server_address = ('localhost', 8000) sock.bind(server_address) # 监听连请求 sock.listen(1) while True: print('等待连...') # 受客户端的连请求 client_sock, client_address = sock.accept() try: print('受来自', client_address, '的连') # 收客户端发送的数据 data = client_sock.recv(1024) print('收到的数据:', data.decode()) # 向客户端发送响应数据 response = 'Hello, client!' client_sock.sendall(response.encode()) finally: # 关闭客户端套 client_sock.close() ``` 上述示例代码中,首先创建了一个TCP,并通过bind()方法绑定到一个特定的IP地址和端口号。然后使用listen()方法开始监听连请求。下来使用accept()方法受客户端的连请求,并创建一个新的套用于与客户端通信。 在循环中,可以通过recv()方法收客户端发送的数据,并使用sendall()方法向客户端发送响应数据。最后使用close()方法关闭客户端套。 这只是一个简单的示例,TCP编程还可以实现更复杂的功能,如多线程处理多个客户端连、错误处理等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值