一,基础版服务器端客户端(一收一发,只有一个客户端链接)

服务器端:

 #Author : Kelvin
#Date : 2019/1/28 22:10
from socket import *
server=socket.socket(AF_INET,SOCK_STREAM)
server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #解决服务器重启时地址被占用的问题
server.bind(("127.0.0.1",8888))
server.listen(5)
print("服务器已经启动...")
conn,addr=server.accept()
res=conn.recv(1024).decode("utf8")
print("服务器:",res)
conn.send("服务器收到请求!".encode())
conn.close()
server.close()

客户端:

 #Author : Kelvin
#Date : 2019/1/28 22:10
import socket
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(("127.0.0.1",8888))
client.send("客户端请求连接!".encode())
res=client.recv(1024).decode("utf8")
print("客户端:",res)
client.close()

 

二,可交流版服务器端客户端(多收多发,只有一个客户端链接)

服务器端:

 #Author : Kelvin
#Date : 2019/1/28 22:10
from socket import *
server=socket.socket(AF_INET,SOCK_STREAM)
server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #解决服务器重启时地址被占用的问题
server.bind(("127.0.0.1",8888))
server.listen(5)
print("服务器已经启动...")
conn,addr=server.accept()
while True:
res=conn.recv(1024).decode("utf8")
print("\033[1;36;0m服务器接收:\033[0m%s"%res)
con=input("回复:")
conn.send(con.encode())
conn.close()
server.close()

客户端:

 #Author : Kelvin
#Date : 2019/1/28 22:10
from socket import *
client=socket.socket(AF_INET,SOCK_STREAM)
client.connect(("127.0.0.1",8888))
while True:
con=input("回复:")
client.send(con.encode())
print("\033[1;36;0m客户端:\033[0m%s" %con)
res=client.recv(1024).decode("utf8")
print("\033[1;36;0m服务器端:\033[0m%s"%res)
client.close()

 

三,多链接版服务器端客户端(多收多发,多个客户端链接)

服务器端:

 #Author : Kelvin
#Date : 2019/1/28 22:10
from socket import *
server=socket.socket(AF_INET,SOCK_STREAM)
server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #解决服务器重启时地址被占用的问题
server.bind(("127.0.0.1",8888))
server.listen(5)
while True:
print("服务器已经启动...")
conn,addr=server.accept()
while True:
try:
res=conn.recv(1024).decode("utf8")
print("\033[1;36;0m服务器接收:\033[0m%s"%res)
con=input("回复:")
conn.send(con.encode())
except Exception:
break
conn.close()
server.close()

客户端1:

 #Author : Kelvin
#Date : 2019/1/28 22:10
import socket
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(("127.0.0.1",8888))
while True:
con=input("回复:")
client.send(con.encode())
print("\033[1;36;0m客户端1:\033[0m%s" %con)
res=client.recv(1024).decode("utf8")
print("\033[1;36;0m服务器端:\033[0m%s"%res)
client.close()

客户端2:

 #Author : Kelvin
#Date : 2019/1/28 22:10
import socket
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(("127.0.0.1",8888))
while True:
con=input("回复:")
client.send(con.encode())
print("\033[1;36;0m客户端2:\033[0m%s" %con)
res=client.recv(1024).decode("utf8")
print("\033[1;36;0m服务器端:\033[0m%s"%res)
client.close()

基于tcp的套接字编程的更多相关文章

  1. UDP,TCP的套接字编程的Python实现

    UDP,TCP的套接字编程的Python实现 套接字:连接应用层和运输层,应用层的网络应用程序使用IP地址+端口号来标识自己,然后通过套接字调用运输层为其服务,网络应用程序只能指定自己要使用的网络类型 ...

  2. 基于udp的套接字编程

    一,简单明了了解udp套接字编程 客户端: #Author : Kelvin #Date : 2019/1/30 11:07 from socket import * ip_conf=("1 ...

  3. Day9 基于TCP的套接字和基于UDP的套接字

    服务端: ss=socket() #创建服务器套接字 ss.bind() #把地址绑定到套接字 ss.listen() #监听套接字, inf_loop: #服务器无限循环 cs=ss.accept( ...

  4. python TCP socket套接字编程以及注意事项

    TCPServer.py #coding:utf-8 import socket #s 等待链接 #c 实时通讯 s = socket.socket(socket.AF_INET,socket.SOC ...

  5. 基于TCP的套接字

    tcp服务端 1 ss = socket() #创建服务器套接字 2 ss.bind() #把地址绑定到套接字 3 ss.listen() #监听链接 4 inf_loop: #服务器无限循环 5 c ...

  6. 基本套接字编程(1) -- tcp篇

    1. Socket简介 Socket是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机的相关进程之间的数据交换. 几个定义: (1)IP地址:即依照TCP/IP协议分配给本地主机 ...

  7. 网络编程之基于UDP协议的套接字编程、基于socketserver实现并发的socket

    目录 基于UDP协议的套接字编程 UDP套接字简单示例 服务端 客户端 基于socketserver实现并发的socket 基于TCP协议 server类 request类 继承关系 服务端 客户端1 ...

  8. 基于socketserver实现并发的socket套接字编程

    一.基于TCP协议 基于tcp的套接字,关键就是两个循环,一个链接循环,一个通信循环 socketserver模块中分两大类:server类(解决链接问题)和request类(解决通信问题) 1.1 ...

  9. 套接字编程(VC_Win32)

    简介(源于维基) Berkeley套接字(也作BSD套接字应用程序接口)刚开始是4.2BSD Unix操作系统(于1983发布)的一套应用程序接口.然而,由于AT&T的专利保护着UNIX,所以 ...

随机推荐

  1. Effective C++ 读书笔记(46-50)

    条款四十六:需要类型转换时请为模板定义非成员函数 条款四十七:请使用traits classes 表现类型信息 1.整合重载技术后,traits classes 有可能在编译期对类型执行if...el ...

  2. python字符串基本编码

    综述:python中字符串分为字节字符和非字节字符python3中默认输入字符串以非字节字符编码,使用unicode字符集表示,可以使用encode方法转化为ascii,utf-8, utf-16等各 ...

  3. Jenkins通过Publish over SSH插件实现远程部署

    Jenkins通过Publish over SSH插件实现远程部署 步凑一.配置ssh免秘钥登录 部署详情地址:http://www.cnblogs.com/Dev0ps/p/8259099.html ...

  4. Java 面试知识点解析(三)——JVM篇

    前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...

  5. 设计模式之策略模式(Strategy Pattern)

    模板方法是通过继承实现的,在父类中定义出算法的骨架,将不同点在子类中实现.而策略模式是通过接口实现的,策略中定义了完整的算法.它们有点像啊-- 策略模式的定义 策略模式(Strategy Patter ...

  6. VMware Workstation 的安装和使用

    https://blog.csdn.net/lamp_yang_3533/article/details/53136474   VMware Workstation 是一个虚拟PC的软件,利用VMwa ...

  7. MySQL事务原理&实战【官方精译】

    事务隔离级别 事务隔离是数据库处理的基础之一.隔离是I中的首字母 ACID ; 隔离级别是在多个事务同时进行更改和执行查询时,对结果的性能和可靠性,一致性和可重复性之间的平衡进行微调的设置. Inno ...

  8. composer安装以及更新问题,配置中国镜像源。

    配置国内镜像源 中国镜像源 https://pkg.phpcomposer.com/ composer 中文官网地址 http://www.phpcomposer.com/ 下载 Composer 安 ...

  9. 火狐浏览器插件--xpath利器

    以前在做web自动化的时候,免不了要找定位啊什么的.一层层找下来太痛苦了,时间也浪费了一天写不了啥.特别是在最开始接触自动化的时候,我们系统坑爹的只支持IE.后来换公司了,在偶然情况下,得知了fire ...

  10. 干货 | Java中获取类名的3种方法!

    获取类名的方法 Java 中获取类名的方式主要有以下三种. getName() 返回的是虚拟机里面的class的类名表现形式. getCanonicalName() 返回的是更容易理解的类名表示. g ...