python创建socket对象_python---一个简单的socket

server端:

1 创建socket对象。调用socket构造函数。如:

socket = socket.socket( family, type )

#family参数代表地址家族,可为AF_INET或AF_UNIX。AF_INET家族包括Internet地址,AF_UNIX家族用于同一台机器上的进程间通信。

#type参数代表套接字类型,可为SOCK_STREAM(流套接字)和SOCK_DGRAM(数据报套接字)。

2将socket绑定到指定地址。这是通过socket对象的bind方法来实现的:

socket.bind( address )

#由AF_INET所创建的套接字,address地址必须是一个双元素元组,格式是(host,port)。host代表主机,port代表端口号。如果端口号正在使用、主机名不正确或端口已被保留,bind方法将引发socket.error异常。

3 使用socket套接字的listen方法接收连接请求。

socket.listen( backlog )

#backlog指定最多允许多少个客户连接到服务器。它的值至少为1。收到连接请求后,这些请求需要排队,如果队列满,就拒绝请求。

4 服务器套接字通过socket的accept方法等待客户请求一个连接。

connection, address = socket.accept()

调 用accept方法时,socket会时入“waiting”状态。客户请求连接时,方法建立连接并返回服务器。accept方法返回一个含有两个元素的 元组(connection,address)。第一个元素connection是新的socket对象,服务器必须通过它与客户通信;第二个元素 address是客户的Internet地址。

5 处理阶段,服务器和客户端通过send和recv方法通信(传输 数据)。服务器调用send,并采用字符串形式向客户发送信息。send方法返回已发送的字符个数。服务器使用recv方法从客户接收信息。调用recv 时,服务器必须指定一个整数,它对应于可通过本次方法调用来接收的最大数据量。recv方法在接收数据时会进入“blocked”状态,最后返回一个字符 串,用它表示收到的数据。如果发送的数据量超过了recv所允许的,数据会被截短。多余的数据将缓冲于接收端。以后调用recv时,多余的数据会从缓冲区 删除(以及自上次调用recv以来,客户可能发送的其它任何数据)。

6 传输结束,服务器调用socket的close方法关闭连接。

client端:

1 创建一个socket以连接服务器:

socket = socket.socket( family, type )

2 使用socket的connect方法连接服务器。对于AF_INET家族,连接格式如下:

socket.connect( (host,port) )

host代表服务器主机名或IP,port代表服务器进程所绑定的端口号。如连接成功,客户就可通过套接字与服务器通信,如果连接失败,会引发socket.error异常。

3 处理阶段,客户和服务器将通过send方法和recv方法通信。

4 传输结束,客户通过调用socket的close方法关闭连接。

代码:

server.py

if __name__ == '__main__':importsocket

sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.bind(('localhost', 8001))

sock.listen(5)whileTrue:

connection,address=sock.accept()try:

connection.settimeout(5)

buf= connection.recv(1024)if buf == '1':

connection.send('welcome to server!')else:

connection.send('please go out!')exceptsocket.timeout:print 'time out'connection.close()

client.py

if __name__ == '__main__':importsocket

sock=socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.connect(('localhost', 8001))importtime

time.sleep(2)

sock.send('1')print sock.recv(1024)

sock.close()

在终端运行server.py,然后运行clien.py,会在终端打印“welcome to server!"。如果更改client.py的sock.send('1')为其它值在终端会打印”please go out!“,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/476393.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 387. 字符串中的第一个唯一字符

1. 题目 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。 如果不存在,则返回 -1。 案例: s "leetcode" 返回 0. s "loveleetcode", 返回 2. 注意事项:您可以假定该字符串只包含小写字母。来…

vs中html如何设计分页_如何在电路设计中使用负载线(Load Line)?

本知识简介将描述负载线(Load Line)如何影响电路设计以及如何通过从I-V曲线创建负载(load)来分析电路。 整流二极管,LED和晶体管的电路分析包含非线性组件(例如整流二极管,发光二极管(LED)或晶体管)的电路无法使用我们通常应用于仅由电阻,电感…

ha ha

1.上大学的时候去衡山玩,当时爬山爬了一半,累的正想歇会的时候看到路边有个买纪念品的欧巴桑,上去开口就问:老婆........ 2.偶有次开车,有个美女同事搭车,一坐我旁边,偶特紧张滴说:把安全套带上!美女以后再不理偶了。。…

LeetCode 405. 数字转换为十六进制数

1. 题目 给定一个整数,编写一个算法将这个数转换为十六进制数。 对于负整数,我们通常使用 补码运算 方法。 注意: 十六进制中所有字母(a-f)都必须是小写。 十六进制字符串中不能包含多余的前导零。 如果要转化的数为0,那么以单个字符’0’来…

LeetCode之两数之和

1. 题目 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums [2, 7, 11, 15],…

汉字转UNICODE?

Function Str_Gb2UniCode(text:String):String; var i,j,len: integer; cur: integer; t: String; ws: widestring; begin Result:; ws:text; len:length(ws); i:1; j:0; while i<len do begin cur:ord(ws[i]); FmtStr(t,%4.4X,[cur]);//BCD转换 Result…

LeetCode 412. Fizz Buzz

1. 题目 写一个程序&#xff0c;输出从 1 到 n 数字的字符串表示。 如果 n 是3的倍数&#xff0c;输出“Fizz” 如果 n 是5的倍数&#xff0c;输出“Buzz” 如果 n 同时是3和5的倍数&#xff0c;输出 “FizzBuzz” 示例&#xff1a; n 15, 返回: ["1","2&…

商务搜索引擎_2019年中国网民搜索引擎使用情况研究报告

中国互联网络信息中心(CNNIC)最新发布《2019年中国网民搜索引擎使用情况研究报告》。报告对中国网民的搜索引擎使用行为&#xff0c;搜索引擎用户属性、满意度和信任度&#xff0c;以及搜索广告接受程度等进行了全面展示&#xff0c;以反映国内搜索引擎业务的发展现状。报告显示…

创建自定义字段类型

演练&#xff1a;创建自定义字段类型 本主题提供了在以下最常见情况下创建自定义字段类型的分步指南&#xff1a;在列表视图和“显示”模式下字段的呈现由字段定义文件中的 RenderPattern 处理&#xff0c;而在“新建”和“编辑”模式下字段的呈现由与 CreateChildControls 方法…

LeetCode之两数相加

1.题目 给出两个 非空 的链表用来表示两个非负的整数。其中&#xff0c;它们各自的位数是按照 逆序 的方式存储的&#xff0c;并且它们的每个节点只能存储一位 数字。 如果&#xff0c;我们将这两个数相加起来&#xff0c;则会返回一个新的链表来表示它们的和。 您可以假设除了…

LeetCode 419. 甲板上的战舰

1. 题目 给定一个二维的甲板&#xff0c; 请计算其中有多少艘战舰。 战舰用 X表示&#xff0c;空位用 .表示。 你需要遵守以下规则&#xff1a; 给你一个有效的甲板&#xff0c;仅由战舰或者空位组成。 战舰只能水平或者垂直放置。 换句话说, 战舰只能由 1xN (1 行, N 列)组…

python展开 c函数中的宏预处理_C 语言常用的预处理-宏函数

#include // 宏函数 三目运算符#define MAX(A, B) A>B?A:B//宏函数 多行 添加\直接回车#define LOOP(FROM, TO, CONTENT)\for(int iFROM;iCONTENT\}//宏函数不需要确定参数类型 普通函数如下int _max(int a, int b) {return a > b ? a : b;}//有相同前缀void cSayHi() …

LeetCode之无重复字符的最长子串

1. 题目 给定一个字符串&#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。 示例 2:输入: "bbbbb" 输出: 1 解释: 因为无重复…

LeetCode 434. 字符串中的单词数

1. 题目 统计字符串中的单词个数&#xff0c;这里的单词指的是连续的不是空格的字符。 请注意&#xff0c;你可以假定字符串里不包括任何不可打印的字符。 示例: 输入: "Hello, my name is John" 输出: 5 解释: 这里的单词是指连续的不是空格的字符&#xff0c;所…

Symbian中的新手问题整理(二)

最近变得有点懒了&#xff0c;博客也一直没有更新&#xff0c;最近在Symbian的论坛呆的时间比较多&#xff0c;但还是觉得博客园的博客系统最好最稳定。 1、关于Symbian 3rd以后的能力问题 Symbian也是从3rd后才引入签名的机制&#xff0c;这也就涉及到一个签名对应的能力问题。…

PAT乙级1004

题目 读入 n&#xff08;>0&#xff09;名学生的姓名、学号、成绩&#xff0c;分别输出成绩最高和成绩最低学生的姓名和学号。输入格式&#xff1a;每个测试输入包含 1 个测试用例&#xff0c;格式为第 1 行&#xff1a;正整数 n第 2 行&#xff1a;第 1 个学生的姓名 学号…

LeetCode 441. 排列硬币(数学解方程)

1. 题目 你总共有 n 枚硬币&#xff0c;你需要将它们摆成一个阶梯形状&#xff0c;第 k 行就必须正好有 k 枚硬币。 给定一个数字 n&#xff0c;找出可形成完整阶梯行的总行数。 n 是一个非负整数&#xff0c;并且在32位有符号整型的范围内。 示例 1: n 5 硬币可排列成以下…

哭笑不得

1.再逼我,再逼我就装死给你看&#xff01; 2.老子不但有车,还是自行的&#xff01; 3.喜欢的话哥我给你买...(意识到对方的怒意后)啊不,是“哥,我给您买&#xff01;” 4.鄙视我的人那么多,你算老几? 5.打死我也不说,你还没使美人儿计呢&#xff01; 6.我不但手气好,脚气也不错…

python3.6是用来干嘛的_学 Python 都用来干嘛的?

很多人跟你一样&#xff0c;只管闷头学&#xff0c;却不知道为什么去学&#xff0c;往往的理由是&#xff1a;“简单啊”、“收入高啊”、“人生苦短&#xff0c;我用Python”&#xff0c;好吧&#xff0c;那我这里简述下学了Python可以干嘛。当然是为了赚钱啊&#xff0c;哈哈…

PAT真题乙类1006 换个格式输出整数

一、题目 让我们用字母 B 来表示“百”、字母 S 表示“十”&#xff0c;用 12...n 来表示不为零的个位数字 n&#xff08;<10&#xff09;&#xff0c;换个格式来输出任一个不超过 3 位的正整数。例如 234 应该被输出为 BBSSS1234&#xff0c;因为它有 2 个“百”、3 个“十…