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

服务器端:

 #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. Kapacitor之TICK脚本,监控输出

    好久没更新博客园了,说来也惭愧,之前说好每隔几天更新一个的,虽然没什么人看,但是作为一个记录,回顾也是能有新的认识,这篇博客是讲的目前我在工作中使用的一个结束点,这个技术点目前网上资料少之甚少,也是希 ...

  2. 运算符优先级--C

    优先口决 括号成员第一; //括号运算符[]() 成员运算符. -> 全体单目第二; //所有的单目运算符比如++ -- +(正) -(负) 指针运算*& 乘除余三,加减四; //这个& ...

  3. eclipse springmvc+Thymeleaf

    修改pom.xml引入Thymeleaf相关包: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=& ...

  4. new/delete和malloc/free的比较

    从C++角度上说,使用new分配堆空间可以调用类的构造函数,而malloc()函数仅仅是一个函数调用,它不会调用构造函数,它所接受的参数是一个unsigned long类型.同样,delete在释放堆 ...

  5. java项目中通过添加filter过滤器解决ajax跨域问题

    1.在web.xml添加filter <filter> <filter-name>contextfilter</filter-name> <filter-cl ...

  6. Thymeleaf 3.0 专题

    http://www.thymeleaf.org/doc/articles/layouts.html thymeleaf的初次使用(带参请求以及调用带参js方法) 之前对于前端框架接触较少,第一次接触 ...

  7. Load balancer does not have available server for client

    最近在研究spring-cloud,研究zuul组件时发生下列错误: Caused by: com.netflix.client.ClientException: Load balancer does ...

  8. Oracle .NET Core Beta驱动已出,自己动手写EF Core Oracle

    使用.net core也有一段时间了,一直都没有Oracle官方的正式版驱动程序,更别说EF版本了.之前基于Oracle官方的.net core预览版本写了个Dapper的数据库操作实现,但是总感觉不 ...

  9. Java 面试知识点解析(六)——数据库篇

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

  10. 如何编写高质量JavaScript代码

    书写可维护的代码(Writing Maintainable Code ) 软件bug的修复是昂贵的,并且随着时间的推移,这些bug的成本也会增加,尤其当这些bug潜伏并慢慢出现在已经发布的软件中时.当 ...