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. Spring MVC 自动为对象注入枚举类型

    原文地址:http://1358440610-qq-com.iteye.com/blog/2079048 如果一个对象里面有枚举类型的话,则Spring MVC是不能够直接进行注入的,因为它只实现了一 ...

  2. 【Nodejs】Expressのサンプルについて

    全体の実行命令: ①c:\workspace>node XXX.js ②ブラウザに「http://localhost:3000」を入力 ▲サンプル① ・ソース(express_demo.js) ...

  3. HDU 4780 Candy Factory(拆点费用流)

    Problem Description   A new candy factory opens in pku-town. The factory import M machines to produc ...

  4. c#Dapper 批量插入Mysql

    <connectionStrings> <add name="sqlconnectionString" connectionString="server ...

  5. springboot restful接口服务异常处理

    一.spring boot中默认的错误处理机制 二.自定义的异常处理

  6. strcpy函数用法

    字符串是数组类型,不能通过赋值运算进行,要通过strcpy进行拷贝,其中目的字符串必须是字符串变量,源字符串可以是常量,复制后源字符串保持不变. strcpy()是C中的一个复制字符串的库函数,在C+ ...

  7. 我的java学习之旅--一些基础

    (因为我粗略学过C,C++,Python,了解过他们的一些语法,所以为了使得java的入门更为顺畅,便会忽略一些和C语法相类似的地方,着重点明一些java自己的特色之处.也减轻一下自己写文字的负担.) ...

  8. 20172325 2018-2019-2 《Java程序设计》第七周学习总结

    20172325 2018-2019-2 <Java程序设计>第七周学习总结 教材学习内容总结 二叉查找树 二叉查找树:是含附加属性的二叉树,即其左孩子小于父节点,而父节点又小于或等于右孩 ...

  9. 分布式协议学习笔记(三) Raft 选举自编写代码练习

    由于时间安排上的原因,这次的代码写的稍微有些简略,只能算是自己对RAFT协议的一个巩固. 实现定义2个节点,使用读取配置文件来获取IP和端口以及节点ID 网络使用boost同步流程 一个线程收 一个线 ...

  10. node.js获取参数的常用方法

    1.req.body 2.req.query 3.req.params 一.req.body例子 body不是nodejs默认提供的,你需要载入body-parser中间件才可以使用req.body, ...