Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。

基于文件类型的套接字家族

套接字家族的名字:AF_UNIX

unix一切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据,两个套接字进程运行在同一机器,可以通过访问同一个文件系统间接完成通信

基于网络类型的套接字家族

套接字家族的名字:AF_INET

服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束

socket()模块函数用法

import  socket# socket实例类serve=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

serve.bind(('127.0.0.1',12))# serve.bind('127.0.0.1',端口)# 127.0.0.1这叫回送地址  表示电脑本身# 端口 为普通整数# 参数为一个元组

serve.listen()# 监听

# 接收链接请求# 第一个是表示客户端的socket    第二个客户端的地址信息client,addr=serve.accept()

serve.recv(10)# 接收数据   单位为字节

serve.close()# 关闭数据

socket服务端
import socket

# 作为服务器,ip和端口号是明确的# 参数1指定 AF_INET 为网络类型 , AF_UNIX 为文件类型# 参数2 指定SOCK_STERAM 表示TCP协议  SOCK_DGRAM 为udp协议

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

# 默认就是网络类型   TCP协议# serve = socket.socket()

server.bind(('127.0.0.1', 122))# 开始监听1688端口server.listen()

# 接收链接请求# 第一个是表示客户端的socket    第二个客户端的地址信息client,addr=server.accept()

data=client.recv(122)client.send('222222'.encode('utf-8'))

server.close()# 关机
socket客户端

常见的异常服务端
import socket

client=socket.socket()

# 所有系统会自动分配随机端口给客户端

client.connect(('127.0.0.1', 122))# 开始通话# 发送数据   注意发送的内容只能是二进制  bytesclient.send('111111111'.encode('utf-8'))

data = client.recv(122)

client.close()
import socketsever = socket.socket()

sever.bind(('127.0.0.1', 133))

sever.listen()

# accept  是一个阻塞函数  会一直等到有客户端链接过来 在继续执行client,addr=sever.accept()print('三次握手成功')

# 收发数据  注意都是用表示客户端的socket来收发数据# client.send('hello'.encode('utf-8'))try:    data=client.recv(100)    print('客户端发来的数据',data)except:    print('client 下线')    client .close()    print('完成四次挥手')

# 休10秒import timetime.sleep(10)

sever.close()print('服务器关机')
客户端import socketclient=socket.socket()

 # connect本质实在进行三次握手   也是一个数据传输的过程  如果服务器没有立马响应 也会阻塞

client.connect(('127.0.0.1',133))

print('握手成功!')

# 发送数据    本质上是把数据交给操作系统来进行发送   一旦数据交给了操作系统 后续的发送# 应用程序就无法控制了  ,send一般不会卡  当然 如果数据量很大就会阻塞# client.send('hello'.encode('utf-8'))# print('发送完成')

# 是从操作系统缓存区读取数据   如果当前还没有任何数据 就会进入阻塞# 会一直等到有数据到来 再继续执行try:    data=client.recv(100)    print('客户端的数据',data)except:    print('client 下线')

# 客户端执行close 是正常关闭链接   会给服务器送空字节  用于表示要断开链接client.close()print('客户端关机')
import socketserver = socket.socket()

server.bind(('127.0.0.1',11))server.listen()server.accept()

server.close()

异常

# 如果已经开启了服务器  再次运行将会抛出 端口占用异常  把之前开启的服务器关掉即可

1.可能是由于你已经启动了服务器程序,却又再次启动了服务器程序,同一个端口不能被多个进程使用导致!

2.三次握手或四次挥手时,发生了异常导致对方程序已经结束而服务器任然处于time_wait状态导致!

3.在高并发的场景下,由于链接的客户端太多,也会产生大量处于time_wait状态的链接

"""有些情况   明明已经关闭了进程 但是 还是端口占用  可能是进程正在后台运行  可以通过端口查出进程  进行关闭windows下netstat -ano  | findstr 9898tasklist | findstr 进程id    拿到进程名称taskkill /f /t /im 进程名称大招: 重启电脑"""
循环服务器
import socketsever = socket.socket()# 指定服务器的端口和ip    客户端的端口系统自动分配的sever.bind(('127.0.0.1',36))sever.listen()

while True:    client_socket,client_addr=sever.accept()    buffer_size=1024    # 缓冲区  就是一个临时的容器  

    while True:        try:            data=client_socket.recv(1024)            if not data:                client_socket.close()                break

            print(data.decode('utf-8'))            # 解码时必须保证双方同意编码方式            # 转为大写在发回去            client_socket.send(data.upper())        except ConnectionResetError as a:            print('%s %s" % (client_addr[0],client_addr[1]),e')            # 如果对方下线了  那服务器也应该关闭对应的客户端对象            client_socket.close()            break

客户端
import  socket

client=socket.socket()client .connect(('127.0.0.1',36))

while True:    msg=input('输入内容...')    if msg == 'q':        break    if not msg:        continue    client.send(msg.encode('utf-8'))    print('发送')    data = client.recv(1024)    print(data.decode('utf-8'))

client.close()

windows正常关闭服务器
import socketsever = socket.socket()

sever.bind(('127.0.0.1',96))sever.listen()

while True:    client_socket,client_addr=sever.accept()    buffer_size=1024

    while True:        try:

            data=client_socket.recv(1024)            if not data:                print(data)

                break

            print('收到数据...',data.decode('utf-8'))                # 解码时必须保证双方同意编码方式                # 转为大写在发回去            client_socket.send(data.upper())        except ConnectionResetError as a:            print('%s %s'%(client_addr[0],client_addr[1]),a)        # 如果对方下线了  那服务器也应该关闭对应的客户端对象            break

    client_socket.close()
客户端
import socketclient=socket.socket()

client.connect(('127.0.0.1',96))

# 添加循环 用来重复收发数据

while True:# 收发的顺序  必须和对面相反  否则卡死了    msg= input('输入内容....q 退出')    if msg == 'q':        break    if not msg:        continue    client.send(msg.encode('utf-8'))    print('发送')    data = client.recv(1024)    print(data.decode('utf-8'))client.close()


转载于:https://www.cnblogs.com/komorebi/p/10940771.html

31 socket客户端. 服务器 异常 语法相关推荐

  1. socket 客户端-服务器的创建--day28

    """ socket是什么? 服务器 socket是Python提供的一个模块 当然其他的任何语言也都有 用于处理网络传输相关的操作 其实就是封装了 底层复杂 丑陋的TC ...

  2. Linux下Socket客户端服务器通信

    Linux/Unix系统一切都是文件 Linux系统中,存在一个虚拟文件系统VFS,把一切实体视为文件,包括普通文件.音视频.输入输出设备等.这样,操作系统可以可以提供统一的接口来操作任何实体.每个& ...

  3. 关于java使用socket与服务器通信的总结

    socket客户端demo 1.创建springboot项目 此处省略 2. 依赖jar 添加pom.xml <?xml version="1.0" encoding=&qu ...

  4. QT 中Socket客户端与服务器异常断开后重连

    在现在的项目开发中,经常要使用TCP/IP协议来进行通讯,但有时候与服务器端的链接由于网络问题导致连接异常或断开,这就需要我们的软件能自动重连,在Linux中,我们的思维一般是通过心跳包来监控连接是否 ...

  5. Java使用Socket实现服务器与客户端通信

    最近在写一个Android 网络局域网通信功能,客户端将数据发送到服务器后,服务器再将这个数据转发给其他客户端为了方便起见,写了一个工具类,废话不多说,上代码,这段代码是基于Gson 的,需要在And ...

  6. 使用python中的socket实现服务器和客户端,并完成图片的传输

    使用python中的socket实现服务器和客户端,并完成图片的传输. 2018年03月09日 16:05:23 阅读数:301 socket服务器代码: [python] view plaincop ...

  7. JAVA服务器没回应_Java Socket为什么服务器无法回复客户端

    Java Socket为什么服务器无法回复客户端 我想写代码让客户端发送一个字符串给Server,Server打印字符串并回复一个字符串,然后Client打印字符串Server reply. 我的服务 ...

  8. java socket 编程 客户机服务器_Java Socket编程服务器响应客户端实例代码

    通过输入流来读取客户端信息,相应的时候通过输出流来实现. 服务端类的代码: import java.io.BufferedReader; import java.io.IOException; imp ...

  9. 社保管理系统连接不上服务器,社保费客户端登录服务器异常

    社保费客户端登录服务器异常 内容精选 换一换 本章节以Linux操作系统为例,指导您通过弹性云服务器内网方式连接GaussDB(for Redis)实例.使用内网连接GaussDB(for Redis ...

最新文章

  1. 每日一皮:这也许是稍微二字最好的诠释...
  2. linux线程调度函数,Linux调度策略及线程优先级设置
  3. 【机器学习基础】理解关联规则算法
  4. Phalanger---PHP的.NET编译器
  5. 怎么彻底重装清空电脑_电脑开不了机怎么重装系统?不用送去维修店啦!
  6. 大于3小于4的整数bleem_比三大,比四小的整数是存在的吗?
  7. PostgreSQL中的pg_hba.conf
  8. Onedark风格配色方案
  9. Datatable 使用技巧
  10. mysql 基本命令整理(1)
  11. IIR滤波器和FIR滤波器
  12. glob库:文件名的匹配
  13. 全国人口年龄结构及抚养比(1987-2019年)
  14. 软件工程——数据流图转换成软件结构图
  15. RocketMQ存储篇——整体结构以及MappedFile讲解
  16. 郑州大学python程序设计试题及答案_Python程序设计(胡新明)-中国大学mooc-试题题目及答案...
  17. 使用BetterTouchTool自定义你的touchBar
  18. mysql获取当前日期的前一天_MySql取得日期(前一天、某一天)
  19. 由AFX_IDW_PANE_FIRST宏的含义分析界面库XTP的一个bug
  20. EXCEL----数据处理(二)----B列中包含了A列的项

热门文章

  1. 如何用代码填充S/4HANA销售订单行项目的数量字段
  2. java python混合开发_Go+Python双语言混合开发
  3. dot pairs 点_Dott入局欧洲共享单车市场 明年3月伦敦巴黎推出
  4. 《非暴力沟通》听书心得
  5. php本地测试还是线上,PHP本地与远程测试(一)
  6. 工业机器人九龙坡区职教中心_山西省襄汾县职教中心“智能工业机器人订单班”学生集体观看直播“2020一带一路暨金砖国家技能发展与技术创新大赛”...
  7. 微软服务器问题,微软服务器内存溢出问题 | 【韩涛博客】
  8. android 蓝牙不停扫描,android – BluetoothAdapter不会停止扫描BLE设备
  9. 福师计算机辅助设计1 ps 在线作业二,福师《计算机辅助设计1(PS)》在线作业一100分答案...
  10. python编程竞赛规则_用python实行羽毛球比赛规则。