一、TCP/IP的套接字编程

服务器端代码:

import  socket

server = socket.socket() # 默认是基于TCP
# 基于TCP的对象serve=socket.socket(socket.AF_INET,socket.SOCK_STREAM,0)
# 基于UDP的对象serve=socket.socket(socket.AF_INET,socket.SOCK_DGRAM,0)

server.bind(("127.0.0.1",8888))  #绑定服务器IP地址和端口

server.listen()  #监听是否有握手请求,参数一般不写(由系统默认处理)或者不超过5个



while True:
   client,addr = serve.accept()  #得到对方的socket对象和地址
   while True:
       try:
           data = client.recv(1024)  #1024表示应用程序的缓冲区大小,recv是从系统缓冲区读取数据到应用程序bytes
           if not data: # 如果是windows,对方强行关闭连接,会抛出异常,如果是linux,不会抛出异常,会死循环收到空的数据包。
               print("对方已经关闭.....")
               client.close()
               break
           print(data.decode("utf-8"))  # 收到的数据解码并打印
           client.send(data.upper())
       except ConnectionResetError:
           print("对方异常关闭连接...")
client.close()
           break
server.close()

用户端代码:

import socket

client = socket.socket()

client.connect(("127.0.0.1",8888))

while True:
   msg = input(">:")
   client.send(msg.encode("utf-8"))
   data = client.recv(1024)
   print("收到服务器:%s" % data.decode("utf-8"))

client.close()

半连接池:此处待续

二、UDP/IP的套接字编程

服务器端代码:

import socket

# UDP协议 在创建socket时只有一个类型不同(SOCK_DGRAM)
server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM,proto=0)

server.bind(("127.0.0.1",8888))
# 没有监听listen,没有accept

while True:
   data,addr = server.recvfrom(1024) # 阻塞 直到收到数据为止
   print("收到来自%s的消息:%s" % (addr[0],data.decode("utf-8")))  # addr是元组,包含客户端IP和端口号
   # 返回值为 数据 和 对方ip地址 和端口号
   server.sendto(data.upper(),addr)

server.close()

客户端代码:

import socket
# 客户端也为SOCK_DGRAM
client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM,0)


while True:
   data = input(">>:").encode("utf-8")
   client.sendto(data,("127.0.0.1",8888))  #服务器端IP与端口
   d,addr = client.recvfrom(1024)
   print(d.decode("utf-8"))

client.close()

20181225 基于TCP/IP和基于UDP/IP的套接字编程的更多相关文章

  1. (网络编程)基于tcp(粘包问题) udp协议的套接字通信

    import   socket 1.通信套接字(1人1句)服务端和1个客户端 2.通信循环(1人多句)服务端和1个客户端 3.通信循环(多人(串行)多句)多个客户端(服务端服务死:1个客户端---&g ...

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

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

  3. 网络编程[第二篇]基于udp协议的套接字编程

    udp协议下的套接字编程 一.udp是无链接的    不可靠的 而上篇的tcp协议是可靠的,会有反馈信息来确认信息交换的完成与否 基于udp协议写成的服务端与客户端,各司其职,不管对方是否接收到信息, ...

  4. 基于UDP协议的套接字编程

    基于udp协议的套接字编程 UDP是无链接的,先启动那一端都不会报错 UDP协议是数据报协议,发空的时候也会自带报头,因此客户端输入空,服务端也能收到 一般不用与传输大数据 虽然没有粘包问题,但是不能 ...

  5. 网络编程----socket介绍、基于tcp协议的套接字实现、基于udp协议的套接字实现

    一.客户端/服务器架构(C/S架构)                                                即C/S架构,包括: 1.硬件C/S架构(打印机) 2.软件C/S架 ...

  6. 基于tcp和udp协议的套接字

    socket:是在应用层和传输层之间的一个抽象层,它把TCP/IP层的复杂的操作封装抽象,并提供一些接口供应用层调用 套接字:被设计用于同一台主机上多个应用程序之间的通信,被称为进程之间通信或IPC ...

  7. 基于tcp/udp协议的套接字通信

    目录 一.套接字分类 二.套接字的工作流程 三.基于tcp协议的套接字 四.基于udp协议的套接字 一.套接字分类 1.基于文件类型的套接字家族:AF_UNIX 2.基于网络类型的套接字家族:AF_I ...

  8. 网络编程(基于udp协议的套接字/socketserver模块/进程简介)

    一.基于UDP协议的套接字 TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据.相对TCP,UDP则是面向无连接的协议. 使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就 ...

  9. 基于udp协议的套接字及udp协议粘包问题

    udp协议的套接字 udp协议传输  服务端和客户端没有建立连接一说. import socket # 总结一下基础工作流程:服务端生成套接字并绑定ip_port,进入数据传输循环,服务端接受客户端发 ...

随机推荐

  1. 开始使用JQuery 方法

    使用jQuery需要3个基本步骤: 1. 下载jQuery.js并保存在网页可以存取的位置.下载链接:dowload 2. 在HTML的head里引用jQuery.js 3. 运用jQuery的方法 ...

  2. Likely root cause: java.lang.IllegalStateException: jar hell!

    jar hell 解决方案: 问题: Likely root cause: java.lang.IllegalStateException: jar hell! 解决: 当一一个类或者一一个资源文件存 ...

  3. return false;和e.preventDefault;和e.stopPropagation的区别

    因为有父, 子节点同在, 因为有监听事件和浏览器默认动作之分. 使用 JavaScript 时为了达到预期效果经常需要阻止事件和动作执行. 一般我们会用到三种方法, 分别是 stopPropagati ...

  4. Android 在已有工程中实现微信图片压缩

    这个我们需要自己去编译,但是已经有人帮我们编译好了,压缩算法也已经实现,因此,我们去下载然后编译即可:https://github.com/bither/bither-android-lib 首先将上 ...

  5. Merge更新同步一个表

    merge T2   --目标表using T1    --源表 on T1.id=T2.id   --匹配条件 when matched then    --匹配update set [name]= ...

  6. hihoCoder hiho一下 第一周 #1032 : 最长回文子串 (Manacher)

    题意:给一个字符串,求最长回文子串的长度. 思路: (1)暴力穷举.O(n^3) -----绝对不行. 穷举所有可能的出现子串O(n^2),再判断是否回文O(n).就是O(n*n*n)了. (2)记录 ...

  7. Weka 二次开发使用心得

    Weka 二次开发使用心得 一.weka数据挖掘流程 使用weka图形界面,初步尝试了下数据的预处理.分类.关联等操作,因为weka本身就是一个开源的机器学习库,于是想自己尝试下利用weka的api进 ...

  8. 【硬盘整理】使用UltimateDefrag将常用文件放置在磁盘最外圈

    使用方法未知.软件截图如下: 官方网站(英文):http://www.disktrix.com/ 汉化破解版V3.0下载地址:http://page2.dfpan.com/fs/7com9monca3 ...

  9. java 的http请求方式:HttpURLConnection和HttpClient

    1.要了解一些概念性的东西,比如Http的协议以及协议头等一些东东 2.HttpURLConnection一般步骤:创建URL对象==>获取URL的HttpURLConnection对象实例== ...

  10. 定义多个属性 Object.defineProperties()

    var book = {} Object.defineProperties(book,{ _year:{ value:2004 }, editable:{ value:1 }, year:{ get: ...