tcp套接字编程模型
1. tcp套接字编程
用下面的一张图可以清楚表示:
下面的python实现也很清晰:
server:
def tcplink(sock, addr):print 'Accept new connection from %s:%s...' % addrsock.send('Welcome!')while True:data = sock.recv(1024)time.sleep(1)if data == 'exit' or not data:breaksock.send('Hello, %s!' % data)sock.close()print 'Connection from %s:%s closed.' % addrif __name__ == '__main__': s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.bind(('127.0.0.1', 9999))s.listen(5)print 'Waiting for connection...'while True:# 接受一个新连接:sock, addr = s.accept()# 创建新线程来处理TCP连接:t = threading.Thread(target=tcplink, args=(sock, addr))t.start()
client:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 建立连接:
s.connect(('127.0.0.1', 9999))
# 接收欢迎消息:
print s.recv(1024)
for data in ['Michael', 'Tracy', 'Sarah']:# 发送数据:s.send(data)print s.recv(1024)
s.send('exit')
s.close()
2. 双向通道
注意,TCP连接创建的是双向通道,双方都可以同时给对方发数据。但是谁先发谁后发,怎么协调,要根据具体的协议来决定。
比如,我们可以基于tcp实现推送:客户端和服务端建立一个套接字,client只是以阻塞的方式read(),直到server有信息。
server:
def tcplink(sock, addr):print 'Accept new connection from %s:%s...' % addrsock.send('Welcome!')while True:time.sleep(1)sock.send('Hello!')sock.close()print 'Connection from %s:%s closed.' % addrif __name__ == '__main__': s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.bind(('127.0.0.1', 9999))s.listen(5)print 'Waiting for connection...'while True:# 接受一个新连接:sock, addr = s.accept()# 创建新线程来处理TCP连接:t = threading.Thread(target=tcplink, args=(sock, addr))t.start()
client
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 9999))
while True:print s.recv(1024)
s.close()
tcp套接字编程模型相关推荐
- 套接字编程---2(TCP套接字编程的流程,TCP套接字编程中的接口函数,TCP套接字的实现,TCP套接字出现的问题,TCP套接字多进程版本,TCP套接字多线程版本)
TCP模型创建流程图 TCP套接字编程中的接口 socket 函数 #include <sys/types.h> /* See NOTES */ #include <sys/sock ...
- 《计算机网络:自顶向下方法(原书第6版)》一2.7 TCP套接字编程
本节书摘来华章计算机<计算机网络:自顶向下方法(原书第6版)>一书中的第2章 ,第2.7节,(美)James F.Kurose Keith W.Ross 著 陈 鸣 译 更多章节内容可以访 ...
- 《网络编程》基本 TCP 套接字编程
在进行套接字编程之前必须熟悉其地址结构,有关套接字的地址结构可参考文章<套接字编程简介>.基于 TCP 的套接字编程的所有客户端和服务器端都是从调用socket 开始,它返回一个套接字描述 ...
- 计算机网络实验4 - TCP套接字编程 - 点对点聊天 - 代码实现
客户端 package chat;import java.io.IOException; import java.io.PrintStream; import java.net.Socket; imp ...
- 《UNIX网络编程 卷1:套接字联网API》学习笔记——基本TCP套接字编程
UNIX网络编程--基本TCP套接字编程 socket 函数 connect 函数 bind 函数 listen 函数 accept 函数 fork 和 exec 函数 并发服务器 close 函数 ...
- UNIX环境编程(c语言)--套接字--基本TCP套接字编程
目录 准备知识 字节序 字节序转换函数 字节操纵函数 地址转换函数 地址结构 基本TCP套接字编程 概要 socket函数 bind函数 listen函数 accept函数 connect函数 通信函 ...
- Experiment 0x1:TCP套接字编程
Experiment 0x1:TCP套接字编程 文章目录 Experiment 0x1:TCP套接字编程 0x0 说明 0x1 要求 0x2 实现 0x3 源码 1- TCP服务端源码 2- TCP客 ...
- TCP套接字编程(C语言)
本篇主要内容介绍: 介绍TCP套接字基本概念 介绍TCP套接字编程流程 基本TCP套接字函数介绍 1.TCP套接字基本概念(非官方解释,个人总结) 套接字是一种网络API,提供一种进程间的通信方法,使 ...
- TCP套接字编程实例(一)
TCP套接字编程实例(一) TCP套接字编程第一部分我们先用单线程简单实现客户端的"发"和服务器的"收".话不多说,直接上代码. 1.Client部分: #in ...
最新文章
- JSP/Servlet Web 学习笔记 DayFour —— 实现一个简单的JSP/Servlet交互
- android 横向滑动事件,android左右手势滑动事件处理
- opencv颜色识别java,Opencv颜色识别与追踪
- centos yum安装时出现 cannot find a valid baseurl for repo: addons
- 合肥工业大学宣城校区大学生创新创业训练项目申报书:“基于Spark平台的人工智能知识的知识图谱构建”...
- C# 版本设计模式(Design Pattern)---------------总序
- Java:集合for高级循环遍历
- linux磁盘冗余阵列
- 2017西安交大ACM小学期数据结构 [又是树状数组、异或]
- matlab 刻度非均匀控制,MATLAB 出一张好看的图
- 虹软2.0 离线人脸识别 Android 开发 Demo
- 11-----的使用
- 大数据笔记--Hadoop(第五篇)
- 在线富文本编辑器-基于Web的HTML编辑器大全(二)
- c#实现四舍五入(Round)/向上舍入(RoundUp)/向下舍入(RoundDown)
- 无线网络打印机服务器安装步骤,在win7安装带网络服务器的打印机步骤.ppt
- 为什么SDWAN成为了组网发展大趋势呢?
- Spring Integration
- DOO-SABIN 细分正方体(1)利用邻接矩阵表示
- 重装win10操作系统(制作系统U盘方法)
热门文章
- 链接oracle 灾难性故障,打开计划任务的时候出现灾难性故障.
- 使用过这么多年Hibernate,对底层原理你知多少?
- 计算机应用与技术大赛,关于举办2017年燕山大学第一届计算机应用技术与程序设计大赛的通知...
- python英文词频统计去除定冠词_使用Python进行英文词频统计
- 金古桥机器人_泽塔奥特曼上演“吃瘪预定”,金古桥强势回顾,阿尔法被骑着打脸...
- javascript:void(0)
- python小数点进位小学数学_python小数的进位与舍去的介绍(附代码)
- java 算法 福尔摩斯的约会
- Java 算法 S01串
- ubuntu 18.04安装与配置 Redis