术语:

套接字接口:socket,是一个IP地址和一个端口号的组合,套接字可以唯一标识整个Internet中的一个网络进程。

TCP连接:一对套接字接口(一个用于接收,一个用于发送)可定义面向连接的协议(如:TCP)的一次连接。

python实现tcp通讯

TCP通讯原理图:

用python做一个TCP协议的传输

准备

01-C.py     客户端

02-S.py     服务器端

代码:

01-C.py  中

import socket
while True: # 创建客户端socket用以跟服务器连接通信
# tcp协议对应为SOCK_STREAM
client_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # connect方法用来连接服务器
server_addr = ("127.0.0.1", 8200)
client_sock.connect(server_addr) # 提示用户输入要发送的数据
msg = input("请输入要发送的内容:")
# send()方法想服务器发送数据
client_sock.send(msg.encode()) # recv()接收对方发送过来的数据,最大接收1024个字节
recv_data = client_sock.recv(1024)
print("收到了服务器的回应信息:%s" % recv_data.decode()) # 关闭客户端套接字
# client_sock.close()

  

02-S.py  中

import socket
while True:
# 创建socket
# 注意TCP协议对应的为SOCK_STREAM 流式
server_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定IP地址和端口
address = ("", 8200)
server_sock.bind(address) # 让服务端的socket开启监听,等待客户端的连接请求
# listen中的参数表示已经建立链接和半链接的总数
# 如果当前已建立链接数和半链接数已达到设定值,那么新客户端不会立即connect成功,而是等待服务器能够处理时
server_sock.listen(128) # 使用accept方法接收客户端的连接请求
# 如果有新的客户端来连接服务器,那么就产生一个新的套接字专门为这个客户端服务
# client_sock用来为这个客户端服务,与客户端形成一对一的连接
# 而server_sock就可以省下来专门等待其他新客户端的连接请求
# client_addr是请求连接的客户端的地址信息,为元祖,包含用户的IP和端口
client_sock, client_addr = server_sock.accept()
print("客户端%s:%s进行了连接!" % client_addr) # recv()方法可以接收客户端发送过来的数据,指明最大收取1024个字节的数据
recv_data = client_sock.recv(1024)
# python3中收到的数据为bytes类型
# recv_data.decode()将bytes类型转为str类型
print("接收到的数据为:", recv_data.decode()) # send()方法向客户端发送数据,要求发送bytes类型的数据
client_sock.send("thank you!\n".encode()) # 关闭与客户端连接的socket
# 只要关闭了,就意味着为不能再为这个客户端服务了,如果还需要服务,只能再次重新连接
# client_sock.close() # 关闭服务端的监听socket
# 要这个套接字关闭了,就意味着整个程序不能再接收任何新的客户端的连接
# server_sock.close()

  

运行:

01-C.py

02-S.py

在01-C.py的提示下输入字符:123

回头看看02-S.py的输出结果

相同主机上的网络通信也可以如上使用。为提高相同主机上的通信,可以考虑Unix域协议方式实现通讯,参考:https://www.cnblogs.com/andy9468/p/11527226.html

socket套接字TCP协议传输-案例测试的更多相关文章

  1. socket套接字TCP API

    socket套接字TCP API socket概念 socket又称"套接字",是计算机网络中进程间通信数据通道的一个端点.或称之为句柄.IP地址+port号就能够唯一确定一个so ...

  2. linux网络编程-(socket套接字编程UDP传输)

    今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中, ...

  3. 02网络编程( socket套接字+TCP粘包 )

    目录 02 网络编程 一.socket套接字编程 二.简易代码模板 2.1 服务端 2.2 客户端 三.通信循环及代码优化 四.黏包现象 五.struct模块 六.简易版本报头 七.上传文件数据 * ...

  4. 传输模型, tcp socket套接字

    osi七层模型 tcp/ip四层模型 socket套接字 tcp 协议是可靠的  包括 三次握手 四次挥手 import socket # server server = socket.socket( ...

  5. python--socket套接字/TCP

    socket套接字/TCP 一 客户端/服务器架构 C/S架构,包括 硬件C/S架构(打印机) 软件C/S 架构(web服务) C/S架构的软件(软件属于应用层)是基于网络进行通信的 Server端要 ...

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

    TCP协议:传输协议,基于端口工作 三次握手,四次挥手 TCP协议建立双向通道. 三次握手, 建连接: 1:客户端向服务端发送建立连接的请求 2:服务端返回收到请求的信息给客户端,并且发送往客户端建立 ...

  7. 一、网络编程-UDP传输协议及socket套接字使用

    知识点基本介绍:1.网络通信协议一般就是UDP和TCP俩种传输协议,这一章先说UDP,UDP是一种比较简单的传输协议,如qq使用的就是UDP          2.ip:ip就是标记网络中中的一台电脑 ...

  8. Python 31 TCP协议 、socket套接字

    1.TCP协议 可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割. (1)三次握手建链接( ...

  9. 网络编程——TCP协议、UDP协议、socket套接字、粘包问题以及解决方法

    网络编程--TCP协议.UDP协议.socket套接字.粘包问题以及解决方法 TCP协议(流式协议) ​ 当应用程序想通过TCP协议实现远程通信时,彼此之间必须先建立双向通信通道,基于该双向通道实现数 ...

随机推荐

  1. u3d发布成全屏的方式

    using UnityEngine;   using System.Collections;   public class example : MonoBehaviour {   public voi ...

  2. Project Navigator Help: Creating a Workspace in Xcode

    Creating a Workspace Start a multiproduct development endeavor by creating a workspace. 1.Choose Fil ...

  3. 使用GitHub和Eclipse进行javaEE开发步骤

    下载Git客户端:链接:http://pan.baidu.com/s/1jIueUEy 密码:7gef; 下载Eclipse javaee客户端:http://www.eclipse.org/down ...

  4. c++ timeval

    struct timeval结构体   struct timeval结构体在time.h中的定义为:struct timeval{__time_t tv_sec;        /* Seconds. ...

  5. Ubuntu创建新用户并增加管理员权限

    1.Ubuntu中的root帐号默认是被禁用了的,所以登陆的时候没有这个账号 打开终端开启root账户 sudo passwd -u root sudo passwd root 设置root密码,输入 ...

  6. [java] java 线程join方法详解

    join方法的作用是使所属线程对象正常执行run方法,而对当前线程无限期阻塞,直到所属线程销毁后再执行当前线程的逻辑. 一.先看普通的无join方法NoJoin.java public class N ...

  7. [dubbo] dubbo 基础使用

    Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候 ...

  8. ionic安装及测试

    官方教程: http://ionicframework.com/getting-started/ 官方教程写得比较简单,简单来说就是 1)安装nodejs(安装方法:http://www.cnblog ...

  9. devstack screen 详解

    n my previous blog i discussed how to install devstack based openstack. Now if I need to restart ind ...

  10. outline的兼容性及使用限制

    outline 和 border的区别: outline不占据文档空间,border占据文档空间. outline无法单独设置上下左右,只要设置outline,必须所有的边都设置:border可以设置 ...