免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1775 | 回复: 0
打印 上一主题 下一主题

Python网络编程基础笔记-以NULL作为字符串结束标识 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-29 00:03 |只看该作者 |倒序浏览
1.服务器端程序接收数据
               
               
                # -*- coding: cp936 -*-
"""
接收以NULL("\0")作为结束标识的字符串
为了演示多次接收数据,故意将接收的缓冲区改小为20.
客户端发送的数据长度(以"\0"作为判断长度的表示,而不是NULL)应该大于20
"""
import socket
import sys
host = ""
port = 50000
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((host,port))
s.listen(5)
while 1:
    clientsock,clientaddr = s.accept()
    while 1:
        buf = clientsock.recv(20)
        # 判断发送的最好一个字符是否是'\0'
        if len(buf) != 0:
            # 这次使用了sys.stdout.write,它不会自动添加"\n",所有的"\n"都是从客户端接收来的.
            sys.stdout.write(buf)
            if buf[len(buf)-1] == '\0':
                break
    clientsock.close()
   
"""
输出结果:
0000
1111
2222
3333
4444
5555
6666
7777
8888
9999
每次recv服务器端会接收20个字符,如果接收到"\0"就表明客户端发送的字符串结束了,
可以关闭socket了,注意中间出现的"\n"直接打印成换行符
"""
2.客户端发送字符串程序
# -*- coding: cp936 -*-
"""
发送以Null("\0")作为结束标识的字符串
发送的字符串长度应该大于服务器接收缓冲区的长度(20),否则无法在服务器端演示多次调用recv
注意字符串中添加了不少的"\n"
"""
import socket
host = "localhost"
port = 50000
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((host,port))
s.send("0000\n1111\n2222\n3333\n4444\n5555\n6666\n7777\n8888\n9999" + "\0")
s.close()


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/19742/showart_409622.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP