socket通信流程

#server端
#family参数代表地址家族,可为AF_INET或AF_UNIX。AF_INET家族包括#Internet地址,AF_UNIX家族用于同一台机器上的进程间通信。
#type参数代表套接字类型,可为SOCK_STREAM(流套接字)和#SOCK_DGRAM(数据报套接字)。
socket=socket.socket()
#由AF_INET所创建的套接字,address地址必须是一个双元素元组,格式是
#(host,port)。host代表主机,port代表端口号。如果端口号正在使用、主机#名不正确或端口已被保留,bind方法将引发socket.error异常。
address=('127.0.0.1',8000) socket.bind(address) #backlog指定最多允许多少个客户连接到服务器。它的值至少为1。收到连接#请求后,这些请求需要排队,如果队列满,就拒绝请求。
socket.listen(2)
'''调 用accept方法时,socket会时入“waiting”状态。客户请求连接时,方法建立连接并返回服务器。accept方法返回一个含有两个元素的 元组(connection,address)。第一个元素connection是新的socket对象,服务器必须通过它与客户通信;第二个元素 address是客户的Internet地址。'''
connection, address = socket.accept() connection.send(bytes('aaa','utf8'))
socket.close()
#client端
socket = socket.socket( family, type ) socket.connect( (host,port) ) ret=socket.recv(1024) print(str(ret,'utf8'))


一接一收

不间断聊天和推出处理:

#-*- coding: utf-8 -*-
import socket sk=socket.socket() addr=('127.0.0.1',8000) sk.bind(addr) sk.listen(3) while True:
conn,addr=sk.accept()
print(addr)
while True:
try:
data=conn.recv(1024)
except Exception:
break
print(str(data,'utf8'))
if not data:
break
inp=input('>>>>>')
conn.send(bytes(inp,'utf8'))
conn.close() sk.close()
#-*- coding: utf-8 -*-
import socket sk=socket.socket() addr=('127.0.0.1',8000) sk.connect(addr) while True:
inp=input('>>>>>')
if inp=='exit':
break
sk.send(bytes(inp,'utf8'))
data=sk.recv(1024)
print(str(data,'utf8')) sk.close()

所谓粘包问题主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的。

须知:只有TCP有粘包现象,UDP永远不会粘包

PY3  str   bytes

str : unicode

bytes: 十六进制  离底层更近

由str到bytes  是编码    str类型转bytes类型

b2= bytes(s,'utf8')

s.encode('utf8')

bytes到str 是解码  bytes类型到str类型

s= str(b2,'utf8')

b2.decode('utf8')

25-socket的更多相关文章

  1. Java Socket编程----通信是这样炼成的

    Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术. ...

  2. Java通过socket实现smtp协议发送邮件

    import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.IOException;import java ...

  3. (转)Java Socket编程

    原文出自:http://www.cnblogs.com/rocomp/p/4790340.html Socket是网络驱动层提供给应用程序编程接口和一种机制.可以把Socket比喻成一个港口码头,应用 ...

  4. 一步一步从原理跟我学邮件收取及发送 4.不同平台下的socket

    既然是面向程序员的文章那当然不能只说说原理,一定要有实际动手的操作.    其实作为我个人的经历来说,对于网络编程,这是最重要的一章! 作为一位混迹业内近20年的快退休的程序员,我学习过很多的开发语言 ...

  5. java网络编程Socket通信详解

    Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术. ...

  6. 分布式监控系统Zabbix-3.0.3-完整安装记录(2)-添加mysql监控

    Zabbix3.0 Server以后就自带了MySQL插件来监控mysql数据库的模板,只需要配置好agent客户端,然后在web端给主机增加模板就行了. 以下是公司线上的zabbix3.0环境下添加 ...

  7. Centos 7 mysql Buffered warning: Changed limits: max_connections: 214 解决方法

    Everytime I restart MySQL I have this warning: [Warning] Buffered warning: Changed limits: max_conne ...

  8. linux sed命令学习

    . Sed简介 . 定址 . Sed命令 . 选项 . 元字符集 . 实例 . 脚本 . 小技巧 . Sed简介 sed是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中, ...

  9. Java入门——(8)网络编程

      关键词:IP地址..端口.UDP.DatagramPacket类.DatagramSocket类.TCP.ServerSocket类.Socket类.文件上传     一.基本概念         ...

  10. MySQL5.7通过压缩包方式安装与配置

    首先下载MySQL5.7的压缩包:https://dev.mysql.com/downloads/mysql/5.7.html#downloads 1.解压缩到目标文件夹,解压后有许多文件,介绍一下用 ...

随机推荐

  1. Java 学习笔记提高篇

    Java笔记(提高篇)整理   主要内容: 面向对象 异常 数组 常用类 集合 IO流 线程 反射 Socket编程 1.  面向对象 1.1包 用来管理Java中的类, 类似文件夹管理文件一样. 因 ...

  2. 【Django】关于上传图片遇到的问题

    今天测试上传图片的时候,发现一只报错说找不到文件:FileNotFoundError 通过检查路径的输出,发现首先在settings配置路径的时候有问题 MEDIA_ROOT=os.path.join ...

  3. Linux磁盘配额

    Step1:修改fstab文件,增加磁盘限额用户和用户组信息 # /etc/fstab# Created by anaconda on Sat Dec 29 04:48:18 2018## Acces ...

  4. 解决win10电脑VB虚拟机无法安装64位系统的方法

    64位电脑在VB虚拟机里却只能安装32位系统怎么办? **原因:CPU虚拟化未开启 只要CPU虚拟化开启即可解决问题. 开启步骤: 1.打开电脑设置 2.进入 更新和安全 界面 3.进入 恢复 界面 ...

  5. node.js中通过dgram数据报模块创建UDP服务器和客户端

    node.js中 dgram 模块提供了udp数据包的socket实现,可以方便的创建udp服务器和客户端. 一.创建UDP服务器和客户端 服务端: const dgram = require('dg ...

  6. ASP.NET CORE 2.0 发布到IIS,IIS如何设置环境变量来区分生产环境和测试环境

    0.前言 因为给前端的测试环境是windows,所以要设置windows上的环境变量,如果上Linux就没有这篇文章了,所以大家不要在意为什么core不放在linux上. 1.网上的解决方案 a 方式 ...

  7. vue 需求 data中的数据之间的调用

    我遇到过这种情况  就是在我的data中 会有数据调用data中的其他数据 如图  我的alertInfoType需要拿到screeningCondition中type的值 用过vue的都知道 我是不 ...

  8. mysql 数据库设计

    数据库设计 需求分析 *1.用户模块 用于记录记录注册用户信息 包括属性:用户名,密码,电话,邮箱,身份证号,地址,姓名,昵称... 可选唯一标志属性:用户名,电话,身份证号 存储特点:随系统上线时间 ...

  9. vue-if和v-show区别

    vue-if和vue-show都是对条件进行判断,一直不明白他们的区别,知道看到了官方文档中的解释: v-if 是“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和 ...

  10. Python:每日一题003

    题目: 一个整数,它加上100和加上268后都是一个完全平方数,请问该数是多少? 程序分析: 在10000以内判断,将该数加上100后再开方,加上268后再开方,如果开方后的结果满足如下条件,即是结果 ...