Python_网络编程_socket()

什么是 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='欢迎访问!'+ "
"
    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)    #输出
原文地址:https://www.cnblogs.com/hellangels333/p/8167590.html