一,概述

1,客户端:

创建客户端套接字对象

和服务端套接字建立连接

发送数据

接收数据

关闭客户端套接字

2,服务器端:

创建服务端端套接字对象

绑定端口号

设置监听

等待接受客户端的连接请求

接收数据

发送数据

关闭套接字

二,客户端

1,创建客户端套接字对象

导入import socket;

创建客户端 socket 对象 socket.socket(AddressFamily, Type),其中:

AddressFamily表示IP地址类型, 分为TPv4和IPv6,

Type 表示传输协议类型,

2,客户端套接字对象的方法

connect((host, port)) 表示和服务端套接字建立连接, host是服务器ip地址,port是应用程序的端口号,

send(data) 表示发送数据,data是二进制数据,

recv(buffersize) 表示接收数据, buffersize是每次接收数据的长度,

3,客户端程序

import socket

sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建客户套接字

sk.connect(('127.0.0.1', 8898)) # 尝试连接服务器

send_data = "你好服务端,我是客户端小黑!".encode("gbk")

sk.send(send_data)

print(send_data.decode('gbk'))

rev = sk.recv(1024) # 对话(发送/接收)

rev = rev.decode('gbk')

print(rev)

sk.close() # 关闭客户套接字

三,服务器端

1,创建客户端套接字对象

导入import socket;

创建客户端 socket 对象 socket.socket(AddressFamily, Type)

2,服务器端套接字对象的方法

bind((host, port)) 表示绑定端口号, host 是 ip 地址,port 是端口号,ip

地址一般不指定,表示本机的任何一个ip地址都可以。

listen (backlog) 表示设置监听,backlog参数表示最大等待建立连接的个数。

accept() 表示等待接受客户端的连接请求

send(data) 表示发送数据,data 是二进制数据

recv(buffersize) 表示接收数据, buffersize 是每次接收数据的长度

3. 服务器端程序

import socket

if __name__ == '__main__':

count = 0

while True:

sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sk.bind(('127.0.0.1', 8898)) # 把地址绑定到套接字

print("server:正在监听......")

sk.listen(12) # 监听链接

conn, addr = sk.accept() # 接受客户端链接

ret = conn.recv(1024) # 接收客户端信息

ret = ret.decode("gbk")

print(ret) # 打印客户端信息

count += 1

send_data = "你好客户端,我是服务器端小白!这是你第{}次向我打招呼".format(count).encode("gbk")

conn.send(send_data) # 向客户端发送信息

conn.close() # 关闭客户端套接字

sk.close() # 关闭服务器套接字(可选)

四,程序运行

1,先运行服务器端程序:

2,再运行客户端程序:

本文地址:https://blog.csdn.net/dangfulin/article/details/107640513

希望与广大网友互动??

点此进行留言吧!

python写tcp通信程序_一个简单的基于TCP通信的服务器端与客户端程序相关推荐

  1. python爬b站评论_一个简单的爬取b站up下所有视频的所有评论信息的爬虫

    心血来潮搞了一个简单的爬虫,主要是想知道某个人的b站账号,但是你知道,b站在搜索一个用户时,如果这个用户没有投过稿,是搜不到的,,,这时就只能想方法搞到对方的mid,,就是 space.bilibil ...

  2. java单机应用程序_一个简单的java桌面应用:单机版IFTTT

    1.项目背景: ifttt是"if this then that"的缩写,事实上是让你的网络行为能够引发连锁反应.让你使用更为方便.ifttt旨在帮助人们利用各网站的开放API,将 ...

  3. python云盘搭建教程_超简单!基于Python搭建个人“云盘”,目前最好用的个人云盘...

    超简单!基于Python搭建个人"云盘",目前最好用的个人云盘 1. 简介 当我们想要从本地向云服务器上传文件时,比较常用的有pscp等工具,但避免不了每次上传都要写若干重复的代码 ...

  4. linux tcp文件分包_在Linux下基于TCP协议的文件传输程序.

    [设计目的] 通过 Linux C 编程,设计一个基于 TCP/IP 的文件传输系统,实现网络文件的收发 [设计环境] Ubuntu 12.04 [设计方案] ( 1 )文件读写 任意文件都可以二进制 ...

  5. java 分布式任务_一个简单的基于 Redis 的分布式任务调度器 —— Java 语言实现...

    折腾了一周的 Java Quartz 集群任务调度,很遗憾没能搞定,网上的相关文章也少得可怜,在多节点(多进程)环境下 Quartz 似乎无法动态增减任务,恼火.无奈之下自己撸了一个简单的任务调度器, ...

  6. java实现购买_一个简单的实现购买商品功能的Java小程序

    public class Purchase { public static void main(String[] args) { System.out.println(" * * * * * ...

  7. python自制个人网盘_超简单!基于Python搭建个人“云盘”

    1 简介 当我们想要从本地向云服务器上传文件时,比较常用的有pscp等工具,但避免不了每次上传都要写若干重复的代码. 而笔者最近发现的一个基于Python的工具updog,可以帮助我们在服务器上搭建类 ...

  8. java超市管理系统_一个简单的基于控制台的超市管理系统(java)

    一个小菜鸟的成长之路: 废话不多说,直接上干货 首先是java环境:jdk1.10 jdbc驱动:mysql-connector-java-5.1.46.jar 其次是开发软件IntelliJ IDE ...

  9. android商品数量加减,微信小程序实现一个简单的商品数量加减案例

    简介 这是一个用微信小程序原生代码实现的数量加减demo,主要是用于商品购物车或者商品详情修改数量使用,很简单哦~~~. 核心js方法说明addCount(增加数量) delCount (减少数量) ...

最新文章

  1. 网络营销外包专员浅析网络营销外包如何防止发布的外链被删除呢?
  2. 夺命雷公狗-----tp中遇到数据乘积的问题的遇见
  3. currentThread()方法的作用
  4. IOS开发-关于代码管理工具之SVN
  5. 如何查询一个进程下面的线程数(进程和线程区别)
  6. kbengine 的 nginx反向代理https/wss 配置 支持kbe负载均衡
  7. WIN8系统安装软件时提示“扩展属性不一致“的解决方法
  8. Scala中的下划线使用总结
  9. springboot 配置mybatis
  10. 分库分表工具:Apache ShardingSphere 5.0.0-alpha 发布
  11. 【图像配准】基于matlab GUI互相关图像配准【含Matlab源码 853期】
  12. 10天学会c语言与单片机第6讲,10天学会单片机c语言视频
  13. Scratch 模拟病毒传染小程序
  14. java的编译路径在哪_如何知道我的java编译器的路径
  15. 孤独最高境界:这款单人VR游戏竟能带来多人组队体验
  16. uniapp 集成腾讯云超级播放器问题
  17. Latex自由设置虚线的作用区间及间距
  18. 101个著名的管理学及心理学效应
  19. php ckfinder 无效请求.,解决nginx和php使用ckfinder无法上传大文件的问题
  20. LA4670 Dominating Patterns(AC自动机)

热门文章

  1. [转]SQL中的case when then else end用法
  2. js和jQuery判断数组是否包含指定元素
  3. 文本框中只能输入小于等于100的正整数
  4. Git生成ssh密钥指定文件
  5. 干程序员辣么久,你为什么还没有年薪60万?
  6. js中的总结汇总(以后的都收集到这篇)
  7. javascript jquery ajax动态提交多个参数 api测试
  8. 血泪八条---给中国IT教育培训机构
  9. 以FORWARD为例,分步骤演示Filter对转发请求的拦截效果
  10. 配置classpath,引入jar包