首页 > 其他分享 >TCP通信之经典问题解决

TCP通信之经典问题解决

时间:2024-08-21 17:49:47浏览次数:8  
标签:sock 通信 TCP server conn 经典 data port 服务端

先看下面的代码,研究下执行后会出现什么?

服务端:
from socket import *
ip_port=('127.0.0.1',8003)
buffer_size=1024

sock_server=socket(AF_INET,SOCK_STREAM)
sock_server.bind(ip_port)
sock_server.listen(5)

while True:
    print('服务端建立连接...')
    conn,addr=sock_server.accept()
    while True:
            data=conn.recv(1024)
            print('服务端输出结果:',data)
            conn.send(data.upper())
conn.close()
sock_server.close()


客户端:
from socket import *
ip_port=('127.0.0.1',8002)
buffer_size=1024

sock_client=socket(AF_INET,SOCK_STREAM)
sock_client.connect(ip_port)

while True:
    cmd=input('输入命令:')
    if not cmd:continue
    if cmd == 'quit':break
    sock_client.send(cmd.encode('utf-8'))
    data=sock_client.recv(1024).decode('utf-8')
    print(data)

输出报错结果解析:
1> 客户端输入quit,服务端报错如下:

服务端此时会循环报这个错,客户端不用改,服务端改写方法:

from socket import *
ip_port=('127.0.0.1',8003)
buffer_size=1024

sock_server=socket(AF_INET,SOCK_STREAM)
sock_server.bind(ip_port)
sock_server.listen(5)

while True:
    print('服务端建立连接...')
    conn,addr=sock_server.accept()
    while True:
            data=conn.recv(1024)
            if not data: break
            print('服务端输出结果:',data)
            conn.send(data.upper())
conn.close()
sock_server.close()

2> 上面客户端输入quit正常退出后服务端报错的问题解决了,但是还有种情况,比如客户端突然意外中断了而不是正常退出,服务端报错如下:

服务端代码改写如下:
from socket import *
ip_port=('127.0.0.1',8003)
buffer_size=1024

sock_server=socket(AF_INET,SOCK_STREAM)
sock_server.bind(ip_port)
sock_server.listen(5)

while True:
    print('服务端建立连接...')
    conn,addr=sock_server.accept()
    while True:
        try:
            data=conn.recv(1024)
            if not data: break
            print('服务端输出结果:',data)
            conn.send(data.upper())
        except Exception as e:
            break
conn.close()
sock_server.close()

至此为止,问题解决了。

标签:sock,通信,TCP,server,conn,经典,data,port,服务端
From: https://www.cnblogs.com/kkbest/p/18372216

相关文章

  • IM开发者的零基础通信技术入门(十三):为什么手机信号差?一文即懂!
    【来源申明】本文引用了微信公众号“网优雇佣军”的《是谁偷走了我家的手机信号?》文章内容。为了更好的内容呈现,下文在引用和收录时内容有改动,转载时请注明原文来源信息,尊重原作者的劳动。1、系列文章引言1.1适合谁来阅读?本系列文章尽量使用最浅显易懂的文字、图片来组织内容......
  • leetcode面试经典150题- 3. 无重复字符的最长子串
    https://leetcode.cn/problems/longest-substring-without-repeating-characters/description/?envType=study-plan-v2&envId=top-interview-150  packageleetcode150import"testing"funcTestLengthOfLongestSubstring(t*testing.T){s:=&qu......
  • 豆瓣8.4,时隔9年,经典Python编程三剑客之一第2版重磅上市!
    时隔9年,畅销近20万册,豆瓣评分8.4,被誉为'Python编程三剑客'之一的《Python极客项目编程》终于迎来了第2版中文版的问世!作为一本经典图书的延续,第2版不仅基于Python3.9进行了全书修订,还包含AI语音识别等5个全新项目,让你跟上Python的最新潮流。 这本书因前沿的技术和易懂的代码......
  • Android开发 - Handler 类处理线程通信与任务调度解析
    什么是Handler类是处理线程间通信和任务调度的一个重要工具,用于在不同的线程之间传递消息和执行任务使用场景线程间通信:在子线程中执行任务后,更新主线程(UI线程)的界面。任务调度:安排在将来某个时间点执行的任务。基本工作原理消息队列:每个线程(包括主线程)都有一个......
  • TCP,UDP,Socket,Http网络编程面试题 47道
    1.什么是网络编程        1.网络编程的本质是多台计算机之间的数据交换。数据传递本身没有多大的难度,不就是把一个设备中的数据发送给其他设备,然后接受另外一个设备反馈的数据。现在的网络编程基本上都是基于请求/响应方式的,也就是一个设备发送请求数据给另......
  • leetcode面试经典150题- 15. 三数之和
    https://leetcode.cn/problems/3sum/description/?envType=study-plan-v2&envId=top-interview-150 packageleetcode150import("sort""testing")funcTestThreeSum(t*testing.T){nums:=[]int{0,2,2,3,0,1,2,3,-......
  • TCP/IP-网络层
    网络层的主要作用        网络层通过路由选择来确定数据包从发送端到接收端的最佳路径,并通过网络地址(如IP地址)来标识和寻址主机和网络。其提供的服务是无连接的,表示数据包的传输不依赖于事先建立的连接。路由选择        路由选择是确定数据包从源主机到目......
  • tcp多个客户端访问服务端,运用多线程
    客户端packagecom.shujia.day20.tcpdemo3;importjava.io.InputStream;importjava.io.OutputStream;importjava.net.Socket;importjava.util.Scanner;/*1:建立客户端的Socket服务,并明确要连接的服务器。2:如果连接建立成功,就表明,已经建立了数据传输的通......
  • tcp协议
    客户端packagecom.shujia.day20.tcpdemo2;importjava.io.InputStream;importjava.io.OutputStream;importjava.net.Socket;importjava.util.Scanner;/*1:建立客户端的Socket服务,并明确要连接的服务器。2:如果连接建立成功,就表明,已经建立了数据传输的通......
  • 2024浙江省信息通信行业职业技能竞赛信息安全测试员竞赛CTF比赛
    浙江省信息通信行业职业技能竞赛信息安全测试员竞赛CTF比赛MISC部分Author:Ns100kUpFrom:极安云科-服务中心Data:2024/08/07Copyright:本内容版权归属极安云科,未经授权不得以任何形式复制、转载、摘编和使用。培训、环境、资料、考证公众号:Geek极安云科网络安全群:62403......