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

Python_网络编程_socket()

时间:2018-01-01 16:52:58      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:计算机   code   pre   run   监听   声明   client   字符串   ret   

什么是 Socket?

Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。

详细资料查看菜鸟教程http://www.runoob.com/python3/python3-socket.html

案例1 - 实现连接:

1.1服务端

# -*- coding: UTF-8 -*- 
# Filename : Python_网络编程_服务器端.py

#引入模块
import socket,sys

#创建socket对象
serversocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)  #socket内的两个参数分别是:IPV4、TCP

# 获取本地主机名
host = socket.gethostname()
port = 9999  #注:这里是自定义的,尽量不要用4000以内的端口

# 绑定端口
serversocket.bind((host, port))

# 设置最大连接数,超过后排队
serversocket.listen(5)

print("服务器已经开启,可以连接...")
while True:
    # 建立客户端连接
    clientsocket,addr = serversocket.accept()      

    print("连接地址: %s" % str(addr))
    
    msg=欢迎访问!+ "\r\n"
    clientsocket.send(msg.encode(utf-8))
    clientsocket.close()

1.2客户端

# 导入 socket、sys 模块
import socket
import sys

# 创建 socket 对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

# 获取本地主机名
host = socket.gethostname() 

# 设置端口好
port = 9999

# 连接服务,指定主机和端口
s.connect((host, port))

# 接收小于 1024 字节的数据
msg = s.recv(1024)

s.close()

print (msg.decode(utf-8))

 

 

案例2 - 实现双向信息传递:

2.1服务器端

# -*- coding:utf8 -*-


"""
备注:这是服务器
"""
import socket,sys  # 导入socket模块

sk = socket.socket()  # 创建socket对象
sk.bind(("127.0.0.1", 8888))  # 绑定端口,“127.0.0.1”代表本机地址,8888为设置链接的端口地址
sk.listen(5)  # 设置监听,最多可有5个客户端进行排队
print("等待客户连接中……")
while True:     #准备循环执行以下步骤
    conn, addr = sk.accept()  # 阻塞状态,被动等待客户端的连接
    print(conn)  # conn可以理解客户端的socket对象
    print(addr)  # addr为客户端的端口地址
    # (‘127.0.0.1‘, 40966)
    accept_data = conn.recv(1024)  # conn.recv()接收客户端的内容,接收到的是bytes类型数据,通常最大是1024个字节
    if  accept_data:  #‘如果能正常接收到客户端传来数据,就...’即:不为空
        accept_data2 = accept_data.decode("utf-8")  # str(data,encoding="utf8")用“utf8”进行解码
        if accept_data2==exit:   #如果客户端传来的是“exit”就执行。。。
            sys.exit()
        else:    
            print("".join(("接收内容:", accept_data2, "    客户端口:", str(addr[1]))))
            send_data = input("输入发送内容:")  #给客户端发送内容
            conn.sendall(bytes(send_data, encoding="utf8"))  # 发送内容必须为bytes类型数据,bytes(data, encoding="utf8")用“utf8”格式进行编码
conn.close()
sys.close()

2.2客户端:

# -*- coding:utf8 -*-
#修改接口,和server4链接
#修改为多次运行  while True
‘‘‘
备注:这是客户端;当在客户端输入“exit”时服务端断开
‘‘‘

import socket
while True:
    obj = socket.socket()   #注 括号内默认“socket.AF_INET,socket.SOCK_STREAM”,是IPV4 和 TCP协议
    obj.connect(("127.0.0.1",8888))   #声明链接方式,ip 和 端口
    send_data = input("输入发送内容:")  #输入传输内容(字符串格式)
    obj.sendall(bytes(send_data, encoding="utf8")) #转换为字节码格式并发送给服务器
    ret = str(obj.recv(1024),encoding="utf-8")  #接收到(服务器传来的)字节码格式的内容,转为字符串格式
    print(ret)    #输出

 

Python_网络编程_socket()

标签:计算机   code   pre   run   监听   声明   client   字符串   ret   

原文地址:https://www.cnblogs.com/hellangels333/p/8167590.html

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