码迷,mamicode.com
首页 > 编程语言 > 详细

python3中Socket学习

时间:2015-03-11 13:06:04      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:socket   python3   

      最近一直忙于实验,偶尔有机会练习了久久未接触到的Socket,以前学习的时候都是在.Net下,不过所有的Socket原理都是一样的,附上自己的代码(网上down的,自己调试而成)

服务器端:

# -*- coding: cp936 -*-
##tcp响应服务器,当与客户端建立连接后,服务器显示客户端ip和端口,同时将接收的客户端信息和'I get it!'传给客户端,此时等待输入一个新的信息传给客户端。
##@小五义
import socket,traceback
host=''
port=12345
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
s.bind((host,port))
s.listen(1)
while 1:
    try:
        clientsock,clientaddr=s.accept()
    except KeyboardInterrupt:
        raise
    except:
        traceback.print_exc()
        continue
    try:
        print("连接来自:",clientsock.getpeername())
        while 1:
            data=clientsock.recv(4096).decode()
            if not len(data):
                break
            print(clientsock.getpeername()[0]+':'+str(data))
            clientsock.sendall(data.encode())
            clientsock.sendall(("\nI get it!\n").encode())
            t=input('input the word:')
            clientsock.sendall(t.encode())
    except (KeyboardInterrupt,SystemExit):
        raise
    except:
        traceback.print_exc()
    try:
        clientsock.close()
    except KeyboardInterrupt:
        raise
    except:
        traceback.print_exc()

客户端:

import socket,sys
port=12345
host=input('输入服务器ip:')
data=input('输入要发送的信息:')
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:
    s.connect((host,port))
except:
    print('连接错误!')
s.send(data.encode())
s.shutdown(1)
print('发送完成。')
while 1:
    buf=s.recv(4096).decode()
    if not len(buf):
        break
    sys.stdout.write(buf)

      现在说说遇到的几个小问题:

1、跟其他的编译环境一样需要两个进程来分别执行服务器和客户端,也就是打开两个shell脚本

2、编码方式的问题。Socket发送的都是byte编码方式,而Python3使用的是Unicode编码方式,所以需要使用decode和encode函数转换

3、这个例子只是一个介绍函数作用的基础例子,实际用的时候肯定要进行功能扩展,把面向对象那一部分添加进去。

python3中Socket学习

标签:socket   python3   

原文地址:http://blog.csdn.net/zhangzhengyi03539/article/details/44195443

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!