基于套接字通信(tcp)

一、基于tcp协议套接字通信(简单版)

套接字socket:套接字是位于应用层与传输层之间,将传输层以下的协议都封装成接口,提供给应用层使用,应用层只需要调用socket的接口或者按照socket的标准编写程序自然遵循tcp/udp协议

服务端:

    

import socket

# 1、买手机phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # tcp称为流式协议,udp称为数据报协议SOCK_DGRAM# print(phone)

# 2、插入/绑定手机卡# phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)phone.bind((‘127.0.0.1‘, 8080))

# 3、开机phone.listen(5)  # 半连接池,限制的是请求数

# 4、等待电话连接print(‘start....‘)conn, client_addr = phone.accept()  # (三次握手建立的双向连接,(客户端的ip,端口))# print(conn)print(client_addr)

# 5、通信:收\发消息data = conn.recv(1024)  # 最大接收的字节数print(‘来自客户端的数据‘, data)conn.send(data.upper())

# import time# time.sleep(500)# 6、挂掉电话连接conn.close()

# 7、关机phone.close()

客户端
import socket

# 1、买手机phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)print(phone)# 2、拨电话phone.connect((‘127.0.0.1‘, 8080))  # 指定服务端ip和端口

# 3、通信:发\收消息phone.send(‘hello‘.encode(‘utf-8‘))# phone.send(bytes(‘hello‘,encoding=‘utf-8‘))data = phone.recv(1024)print(data)

# import time# time.sleep(500)# 4、关闭phone.close()

二、基于tcp协议套接字通信(加上循环)

服务端
import socket

#1、买手机phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #tcp称为流式协议,udp称为数据报协议SOCK_DGRAM# print(phone)

#2、插入/绑定手机卡# phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)phone.bind((‘127.0.0.1‘,8080))

#3、开机phone.listen(5) # 半连接池,限制的是请求数

#4、等待电话连接print(‘start....‘)while True: # 连接循环    conn,client_addr=phone.accept() #(三次握手建立的双向连接,(客户端的ip,端口))    # print(conn)    print(‘已经有一个连接建立成功‘,client_addr)

    #5、通信:收\发消息    while True: # 通信循环        try:            print(‘服务端正在收数据...‘)            data=conn.recv(1024) #最大接收的字节数,没有数据会在原地一直等待收,即发送者发送的数据量必须>0bytes            # print(‘===>‘)            if len(data) == 0:break #在客户端单方面断开连接,服务端才会出现收空数据的情况            print(‘来自客户端的数据‘,data)            conn.send(data.upper())        except ConnectionResetError:            break    #6、挂掉电话连接    conn.close()

#7、关机phone.close()
客户端
import socket

# 1、买手机phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# print(phone)# 2、拨电话phone.connect((‘127.0.0.1‘, 8080))  # 指定服务端ip和端口

# 3、通信:发\收消息while True:  # 通信循环    msg = input(‘>>: ‘).strip()  # msg=‘‘    if len(msg) == 0: continue    phone.send(msg.encode(‘utf-8‘))

    data = phone.recv(1024)

    print(data)

# 4、关闭phone.close()


原文地址:https://www.cnblogs.com/kingyanan/p/9291205.html

时间: 2024-08-04 15:10:12

基于套接字通信(tcp)的相关文章

什么是 socket?简述基于 tcp 协议的套接字通信流程?

Socket的英文原义是"孔"或"插座".通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄, 可以用来实现不同虚拟机或不同计算机之间的通信. 在Internet上的主机一般运行了多个服务软件,同时提供几种服务.每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务. 基于tcp 协议的套接字通信流程: 1). 服务器先用 socket 函数来建立一个套接字,用这个套接字完成通信的监听. 2). 用 bind

一起talk C栗子吧(第一百五十九回:C语言实例--基于AF_INET域的数据报套接字通信)

各位看官们,大家好,上一回中咱们说的是基于AF_INET域的流套接字通信的例子,这一回咱们说的例子是:基于AF_INET域的数据报套接字通信 .闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在上一回中一起制作了我们的第三道佳肴是:基于AF_INET域的流套接字通信.今天,我将和大家一起制作第四道佳肴:基于AF_INET域的数据报套接字通信. 制作第四道佳肴的菜谱:数据报套接字过程. 制作第四道佳肴的食材:数据报套接字的接口,套接字属性,套接字地址信息. 看官们,以上的内容,我们

一起talk C栗子吧(第一百五十七回:C语言实例--基于AF_UNIX域的数据报套接字通信)

各位看官们,大家好,上一回中咱们说的是基于AF_UNIX域的流套接字通信的例子,这一回咱们说的例子是:基于AF_UNIX域的数据报套接字通信 .闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在上一回中一起制作了我们的第一道佳肴是:基于AF_UNIX域的流套接字通信.今天,我将和大家一起制作第二道佳肴:基于AF_UNIX域的数据报套接字通信. 制作第二道佳肴的菜谱:数据报套接字过程. 制作第二道佳肴的食材:数据报套接字的接口,套接字属性,套接字地址信息. 看官们,以上的内容,我们

一起talk C栗子吧(第一百五十六回:C语言实例--基于AF_UNIX域的流套接字通信)

各位看官们,大家好,上一回中咱们说的获取socket通信地址的例子,这一回咱们说的例子是:基于AF_UNIX域的流套接字通信 .闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在前面章回中介绍了套接字的通信过程以及套接字的的细节,总感觉还缺少些什么,一时还真是想不起来.这好比我们有了食谱也有了食材,那么我们就可以做一道美味的佳肴了.啊!有了.一提到美味的佳肴,灵感就来了.我们缺少的是对套接字的综合演练,也就是把前面章回中知识串在一起,然后举一个综合使用套接字知识进行套接字通信的例

一起talk C栗子吧(第一百五十八回:C语言实例--基于AF_INET域的流套接字通信)

各位看官们,大家好,上一回中咱们说的是基于AF_UNIX域的数据报套接字通信的例子,这一回咱们说的例子是:基于AF_INET域的流套接字通信 .闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在上一回中一起制作了我们的第二道佳肴是:基于AF_UNIX域的数据报套接字通信.今天,我将和大家一起制作第三道佳肴:基于AF_INET域的流套接字通信. 制作第三道佳肴的菜谱:流套接字过程. 制作第三道佳肴的食材:流套接字的接口,套接字属性,套接字地址信息. 看官们,以上的内容,我们在前面章

27 Apr 18 GIL 多进程多线程使用场景 线程互斥锁与GIL对比 基于多线程实现并发的套接字通信 进程池与线程池 同步、异步、阻塞、非阻塞

27 Apr 18 一.全局解释器锁 (GIL) 运行test.py的流程: a.将python解释器的代码从硬盘读入内存 b.将test.py的代码从硬盘读入内存  (一个进程内装有两份代码) c.将test.py中的代码像字符串一样读入python解释器中解析执行 1 .GIL:全局解释器锁 (CPython解释器的特性) In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple na

python 并发编程 基于gevent模块 协程池 实现并发的套接字通信

基于协程池 实现并发的套接字通信 客户端: from socket import * client = socket(AF_INET, SOCK_STREAM) client.connect(('127.0.0.1', 8080)) while True: msg = input(">>>:").strip() if not msg:break client.send(msg.encode("utf-8")) data = client.recv(

网络编程 TCP协议:三次握手,四次回收,反馈机制 socket套接字通信 粘包问题与解决方法

TCP协议:三次握手,四次挥手 TCP协议建立双向通道. 三次握手, 建连接: 1:客户端向服务端发送建立连接的请求 2:服务端返回收到请求的信息给客户端,并且发送往客户端建立连接的请求 3:客户端接收到服务端发来的请求,返回接成功给服务端,完成双向连接 第一客戶向服务端发送请求,请求建立连接 服务端同客户端的请求,并同时向客户端发送建立 连接的请求,最后客户端同意后建立 双向连接. C ----> S C <---- S - 反馈机制: 客户端往服务端发送请求,服务端必须返回响应, 告诉客户

web服务器基础之套接字以及TCP协议

前言 基于C/S架构. Web Service:应用层协议.(http,https) 解决某类具体应用,借助应用空间的某类应用程序来负责完成. 客户端:浏览器 -->应用层协议:http-->web服务端(基于套接字进行通信) ========================================分割线============================================= 网络之间的通信过程需要依靠套接字文件(IP/PORT)进行通信,应用层中的应用程序希望通过套