网络编程的循环收发数据

服务器

from socket import *

server = socket(AF_INET,SOCK_STREAM)#创建服务器对象,套接字家族,面向网络,选择tcp协议,udp(DGRAM)

HOST = "127.0.0.1"#设置服务器ip

PORT = 8888#设置端口

BASE_SIZE = 1024#设置接收文件上限

server.bind((HOST,PORT))#绑定端口,ip

server.listen(5)#监听

while True:

conn,addr = server.accept()#接收客户端请求,完成了三次挥手,获取客户端对象和地址

while True:

try:#监测客户端突然退出异常

msg = conn.recv(BASE_SIZE)#接收信息

if not msg:#linux系统客户端退出不会报错,一直发空包,故实现跨平台

conn.close()

break

print(msg.decode("utf-8"))#打印接收信息,以什么编码存,以什么编码读

conn.send(msg.upper())#给客户端回信息

except ConnectionResetError:#客户端突然退出时,关闭客户端对象,重新进入阻塞接收客户请求

conn.close()

server.close()

客户端

from socket import *

client = socket(AF_INET,SOCK_STREAM)#创建客户端对象,套接字家族,选择面向网络,选择tcp协议

HOST = "127.0.0.1"

PORT = 8888

BASE_SIZE = 1024

client.connect((HOST,PORT))#链接服务器,向服务器发请求,完成三次握手

while True:

msg = input(">>>:").strip().encode("utf-8")

client.send(msg)#发送信息,只能发送bytes类型

res = client.recv(BASE_SIZE)#接收服务器信息

print(res.decode("utf-8"))

client.close()

udp循环输入

服务器

from socket import *

server = socket(AF_INET,SOCK_DGRAM)#建立服务器,选择套接字家族和udp协议

HOST = "127.0.0.1"

PORT = 8888

BASE_SIZE = 1024

server.bind((HOST,PORT))#绑定端口,ip

while True:

msg,addr = server.recvfrom(BASE_SIZE)#直接接收,与tcp不同,tcp接收的是信息,udp接收的是信息和客户端地址

print(msg.decode("utf-8"))

server.sendto(msg.upper(),addr)#直接发送,需要加客户端地址

server.close()

客户端

from socket import *

client = socket(AF_INET, SOCK_DGRAM)

HOST = "127.0.0.1"

PORT = 8888

BASE_SIZE = 1024

while True:

msg = input(">>:").strip().encode("utf-8")

client.sendto(msg,(HOST,PORT))#发送时需加上服务器地址

res,addr = client.recvfrom(BASE_SIZE)#接收服务器信息和服务器地址

print(res.decode("utf-8"))

client.close()

tcp #好人协议,可靠性高,效率低

udp#可靠性低,不管对方收不收到,不管地址存不存在,效率高

原文地址:https://www.cnblogs.com/robert-zhou/p/10176967.html

时间: 2024-10-15 23:57:03

网络编程的循环收发数据的相关文章

Asp.net 使用正则和网络编程抓取网页数据(有用)

Asp.net 使用正则和网络编程抓取网页数据(有用) /// <summary> /// 抓取网页对应内容 /// </summary> /// <param name="strUrl">採集地址</param> /// <param name="Begin">開始字符</param> /// <param name="End">结束字符</param&g

Asp.net 使用正则和网络编程抓取网页数据(实用)

Asp.net 使用正则和网络编程抓取网页数据(实用) /// <summary> /// 抓取网页相应内容 /// </summary> /// <param name="strUrl">采集地址</param> /// <param name="Begin">开始字符</param> /// <param name="End">结束字符</param&g

《网络编程》带外数据

带外数据 有些传输层协议具有带外(Out Of Band,OOB)数据的概念,用于迅速通告对端本端所发生的重要事件.因此,带外数据比普通数据(也称为带内数据)有更高的优先级,它应该总是立即被发送,而不论发送缓冲区中是否有排队等待发送的普通数据或因流量控制而导致发送端的通告窗口大小为 0(即停止发送数据) .带外数据的传输可以使用一条独立的传输层连接,也可以映射到传输普通数据的连接中. UDP 没有实现带外数据传输,TCP 也没有真正的带外数据.只不过 TCP 利用其首部中的 紧急指针标志 和 紧

Java基础——网络编程(一)

本文主要记录网络编程的一些基础知识,学了前班部分,对专业术语有些蒙,但是,收货也是很多很多的.观察了自己计算机的进程,查找其他网络地址的IP,对互联网的层次关系有了更深一步的了解.下面多是概念的摘录,有时间我还要回来再看看,加深理解. 目录: 1.网络编程的基础知识 1.1 网络协议 1.2 tcp /ip 1.3 IP地址 1.4 Port(端口号) 2 UDP/Tcp 3 OSI参考模型 1 网络编程的基础知识 1.1  网络协议 规定了计算机之间连接的物理机械,电器等特性,及计算机间的相互

linux网络编程 基于TCP的程序开发

面向连接的TCP程序设计 基于TCP的程序开发分为服务器端和客户端两部分,常见的核心步骤和流程: 其实按照上面这个流程调用系统API确实可以完全实现应用层程序的开发,一点问题没有.可随着时间的推移,你会觉得这样子的开发毫无激情.为什么TCP的开发就要按照这样的流程来呢?而且一般出的问题几乎都不在这几个系统调用上,原因何在?当我们弄清网络开发的本质,协议栈的设计原理.数据流向等这些问题的答案也就会慢慢浮出水面了.接下来这几篇博文主要是围绕网络编程展开,目的是引出后面对于Linux下TCP/IP协议

java网络编程

网络编程:关注底层数据的传输. 网页编程:关注与客户的交互. 1.网络:将不同区域的计算机连接在一起. 例如:  局域网.城域网.互联网 2.地址:IP地址,可以确定你的计算机在互联网的哪个节点,哪个位置.在网络上确定一个绝对地址.位置.做一个比喻,相当于一个房子的地址. 3.端口号: 在计算机中有很多程序,例如QQ,MSN等等.那么计算机是如何知道QQ程序,与QQ的服务器对接:MSN程序与MSN服务器对接呢. 端口号就相当于房门(继续上边的比喻,一台电脑类似于一座房子). 端口号是用来区分计算

Linux程序设计学习笔记----网络编程之网络数据包拆封包与字节顺序大小端

网络数据包的封包与拆包 过程如下: 将数据从一台计算机通过一定的路径发送到另一台计算机.应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation),如下图所示: 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据包(packet),在链路层叫做帧(frame).数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理. 上图对应两台计算机在同一网段中的情况,

Java 网络编程 字符流的发送与接收 自定义数据边界

在网络编程中,客户端调用了flush方法,就会将缓存在字符流中的文本发送给服务器,服务器该怎样判断客户端发送的文本已经结束了呢? 我们先看一个例子: 客户端: import java.io.IOException; import java.io.PrintWriter; import java.net.InetSocketAddress; import java.net.Socket; import java.util.Scanner; /** * Created by 290248126 on

大数据技术之_16_Scala学习_11_客户信息管理系统+并发编程模型 Akka+Akka 网络编程-小黄鸡客服案例+Akka 网络编程-Spark Master Worker 进程通讯项目

第十五章 客户信息管理系统15.1 项目的开发流程15.2 项目的需求分析15.3 项目的界面15.4 项目的设计-程序框架图15.5 项目的功能实现15.5.1 完成 Customer 类15.5.2 完成显示主菜单和退出软件功能15.5.3 完成显示客户列表的功能15.5.4 完成添加客户的功能15.5.5 完成删除客户的功能15.5.6 完善退出确认功能15.5.7 完善删除确认功能15.5.8 完成修改客户的功能第十六章 并发编程模型 Akka16.1 Akka 的介绍16.2 Acto