首页 > 其他 > 详细

二. 网络编程(套接字TCP协议)

时间:2019-07-04 11:35:32      阅读:94      评论:0      收藏:0      [点我收藏+]

一 .套接字TCP协议 

1. 基于TCP协议的socket

TCP(Transmission Control Protocol)可靠的、面向连接的协议(eg:打电话)、传输效率低全双工通信(发送缓存&接收缓存)、
面向字节流。使用TCP的应用:Web浏览器;电子邮件、文件传输程序。

   注意:   tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端

 server端1

import socket
sk = socket.socket()
sk.bind((127.0.0.1,8898))  #把地址绑定到套接字
sk.listen()          #监听链接
conn,addr = sk.accept() #接受客户端链接
ret = conn.recv(1024)  #接收客户端信息
print(ret)       #打印客户端信息
conn.send(bhi)        #向客户端发送信息
conn.close()       #关闭客户端套接字
sk.close()        #关闭服务器套接字(可选)

client端1

import socket
sk = socket.socket()           # 创建客户套接字
sk.connect((127.0.0.1,8898))    # 尝试连接服务器
sk.send(bhello!)
ret = sk.recv(1024)         # 对话(发送/接收)
print(ret)
sk.close()            # 关闭客户套接字

技术分享图片

解决方法

#加入一条socket配置,重用ip和端口
import socket
from socket import SOL_SOCKET,SO_REUSEADDR
sk = socket.socket()
sk.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #就是它,在bind前加
sk.bind((127.0.0.1,8898))  #把地址绑定到套接字
sk.listen()          #监听链接
conn,addr = sk.accept() #接受客户端链接
ret = conn.recv(1024)   #接收客户端信息
print(ret)              #打印客户端信息
conn.send(bhi)        #向客户端发送信息
conn.close()       #关闭客户端套接字
sk.close()        #关闭服务器套接字(可选)

TCP案例

1.

server
import socket
sk=socket.socket() # 买手机
sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) #  避免服务重启时 侯报错 端口地址错误
sk.bind(("127.0.0.1",8081))# 绑定手机卡
sk.listen()           # 监听  意思就是等别人给我打电话
conn,addr =sk.accept()   #  接受到别人的电话   conn 链接   addr 地址
while True:
     ret=conn.recv(1024).decode("utf-8")
     if ret==bye:
         break
     print(ret)
     aa = input("服务器>>>:")
     conn.send(bytes(aa,encoding="utf-8"))

conn.close()  # 挂电话
sk.close()    # 关机
client
import socket
sk=socket.socket()  # 买手机
sk.connect(("127.0.0.1",8081)) # 拨通人的号
while True:
    bb=input("客服端>>>:")
    sk.send(bytes(bb,encoding="utf-8"))
    ret=sk.recv(1024).decode("utf-8")
    print(ret)
    if ret==bye:
        sk.send(bbye)
        break
sk.close()

2.

server

import socket
sk=socket.socket() # 买手机
sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) #  避免服务重启时 侯报错 端口地址错误

sk.bind(("127.0.0.1",8081))# 绑定手机卡

sk.listen()           # 监听  意思就是等别人给我打电话
conn,addr =sk.accept()   #  接受到别人的电话   conn 链接   addr 地址

while True:
    ret=conn.recv(1024)  #   听别人说话
    print(ret)
    conn.send(blover supreme)  #  和别人说化 必须传一个bytes类型

    ret=conn.recv(1024)
    print(ret.decode("utf-8"))  # 接收客服端信息解码
    conn.send(bytes(吃冒菜啊哈哈,encoding="utf-8"))  # 发送信息到客服端 编码
conn.close()  # 挂电话
sk.close()    # 关机
client
import socket sk=socket.socket() # 买手机 sk.connect(("127.0.0.1",8081)) # 拨通人的号 while True: sk.send(bsuoaaaaa) ret=sk.recv(1024) print(ret) sk.send(bytes(今天中午吃什么.encode(utf-8))) #发送到服务器 编码 ret=sk.recv(1024) print(ret.decode(utf-8)) # 接收到服务器端的信息解码 sk.close()

3.

server

import  socket
from socket import SOL_SOCKET,SO_REUSEADDR
server=socket.socket()
server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
server.bind(("192.168.59.1",8400))
server.listen(5)
while True:
   conn,addr=server.accept()
   while True:
       date=conn.recv(1024).decode("utf-8")
       user,pwd=date.split("|")
       with open("aa.txt","r")as f1:
           for line in  f1:
                us,pw=line.strip().split(:)
                if us==user and pwd==pw:
                    conn.send("成功了".encode("utf-8"))
                else:
                    conn.send("失败了".encode("utf-8"))
client

import  socket
client=socket.socket()
client.connect(("192.168.59.1",8400))
while True:
    user=input("请输入的用户名:")
    pwd=input("请输入你的密码:")
    val="%s|%s"%(user,pwd)
    client.send(val.encode("utf-8"))
    date=client.recv(1024).decode("utf-8")
    print(date)
    client.close()

 

二. 网络编程(套接字TCP协议)

原文:https://www.cnblogs.com/Sup-to/p/11131313.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!