TCP程序流程及服务器客户端


 

Tcp服务器创建:

import socket

 

# 服务器的端口号

PORT = 9000

 

# 创建套接字socket对象,用于进行通讯

# scoket.SOCK_STREAM 表明使用tcp协议,流式协议

# 监听socket

server_sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

 

# 为服务器的socket绑定一个固定的地址,ip和端口,元祖

address = ("", PORT)

server_sock.bind(address)

 

# 让服务器开启监听,可以收到客户端的连接请求

#listen参数表示监听队列的大小,最多能同时处理三次握手的客户端数量

server_sock.listen(128)

 

# 接受客户端的连接请求,与客户端完成三次握手

# accept函数是阻塞,如果当前没有客户端发起连接,则会阻塞等待直到有客户端发起连接

# new_sock是一个新的socket对象,用来跟这个连接的客户端进行一对一数据传输使用

# client_addr是建立连接的客户端的地址,ip和端口  元祖

new_sock, client_addr = server_sock.accept()

 

# print("客户端 %s 已经建立了连接"% str(client_addr))

print("客户端 %s 已经建立了连接" % (client_addr,))

 

# 接收客户端的数据

recv_data = new_sock.recv(1024)

 

print("接收到了客户端 %s 传来的数据: %s" % (client_addr, recv_data.decode()))

 

# 向客户端发送数据

 

msg = input("请输入要传给客户端的数据:")

 

new_sock.send(msg.encode())

 

# 如果没有数据再传给客户端,可以关闭连接

new_sock.close()

 

# 如果不想再接收新的客户端的连接请求,可以关闭server_sock

server_sock.close()

测试:

我们暂时还没有写tcp客户端,可以用nc命令来作为客户端进行测试。

# nc 服务器的IP 服务器的端口
nc 127.0.0.1 8000

 

TCP客户端创建:

import socket

 

# 创建socket对象,用于通信

client_sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

 

# 对于客户端,可以不用绑定一个固定地址,使用操作系统分配的即可

 

# 向服务器发起连接请求, 并完成三次握手

server_addr = ("127.0.0.1", 9000)

client_sock.connect(server_addr)

 

# 向服务器发送数据

msg = input("请输入要发送的数据:")

client_sock.send(msg.encode())

 

# 接收服务器传回来的数据

recv_data = client_sock.recv(1024)

print("收到了由服务器传回的数据:%s" % recv_data.decode())

 

# 如果客户端不想再次发送数据,可以关闭连接

client_sock.close()

 

测试:

可以用我们刚才写的服务器程序,也可用nc命令进行测试

# -l参数表示服务器监听
# nc -l 绑定的服务器ip 端口
nc -l 127.0.0.1 8000

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474111.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IOS开发之格式化日期时间

在开发iOS程序时,有时候需要将时间格式调整成自己希望的格式,这个时候我们可以用NSDateFormatter类来处理。例如: //实例化一个NSDateFormatter对象 NSDateFormatter *dateFormatter [[NSDateFormatter alloc] init]; //设定时间格式,这里可…

LeetCode 1576. 替换所有的问号

文章目录1. 题目2. 解题1. 题目 给你一个仅包含小写英文字母和 ? 字符的字符串 s, 请你将所有的 ? 转换为若干小写字母,使最终的字符串不包含任何 连续重复 的字符。 注意:你 不能 修改非 ‘?’ 字符。 题目测试用例保证 除 ‘?’ 字符…

tcp十种状态

CLOSED:表示关闭状态(初始状态)。 LISTEN:该状态表示服务器端的某个SOCKET处于监听状态,可以接受连接。 SYN_SENT:这个状态与SYN_RCVD遥相呼应,当客户端SOCKET执行CONNECT连接时,它首…

Ural 1519. Formula 1 优美的插头DP

今天早上学了插头DP的思想和最基础的应用,中午就开始敲了,岐哥说第一次写不要看别人代码,利用自己的理解一点点得写出来,这样才锻炼代码能力!于是下午慢慢地构思轮廓,一点点地敲出主体代码,其实…

TCP的2MSL问题

2MSL (Maximum SegmentLifetime) TIME_WAIT状态的存在有两个理由: 让4次挥手关闭流程更加可靠;4次挥手的最后一个ACK是是由主动关闭方发送出去的,若这个ACK丢失,被动关闭方会再次发一个FIN过来。若主动关闭方能够保持一个2MSL的TI…

LeetCode 1577. 数的平方等于两数乘积的方法数(双指针)

文章目录1. 题目2. 解题1. 题目 给你两个整数数组 nums1 和 nums2 ,请你返回根据以下规则形成的三元组的数目(类型 1 和类型 2 ): 类型 1:三元组 (i, j, k) ,如果 nums1[i]2 nums2[j] * nums2[k] 其中 0…

LeetCode 1578. 避免重复字母的最小删除成本

文章目录1. 题目2. 解题1. 题目 给你一个字符串 s 和一个整数数组 cost ,其中 cost[i] 是从 s 中删除字符 i 的代价。 返回使字符串任意相邻两个字母不相同的最小删除成本。 请注意,删除一个字符后,删除其他字符的成本不会改变。 示例 1&…

hdu2709 Sumsets 递推

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid2709 感觉很经典的一道递推题 自己想了有半天的时间了。。。。比较弱。。。。 思路: 设f[n]表示和为n的组合数; 那么 当n为奇数时,很简单,相当于在f[n-1]的每一个…

python入门字符串

python 字符串str, ‘’, ‘’ ‘’, ‘’’ ‘’’;python没有字符,只有字符串hh 切片 字符串不可以修改,修改的话,类似于tuple, 修改的话, 只可以整体修改 tuple 也是可这样, 确切的说只是修改了指针…

python 经典100例(1-20)

【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。 2.程序源代码&#xff1…

go ioc三方库推荐

在 Go 语言中,没有像 Spring Boot 这样的完整的 IOC(Inversion of Control)框架。Go 语言的设计哲学更倾向于简洁、轻量级的解决方案,没有像 Java 的 Spring Framework 这样重量级的 IOC 容器。 然而,Go 社区中有一些…

统一编址 独立编址 寻址空间

概念 存储器统一编址,即从存储空间中划出一部分地址给I/O端口。CPU访问端口和访问存储器的指令在形式上完全相同,只能从地址范围来区分两种操作。优点 对端口操作的指令类型多,功能全,不仅能对端口进行数据传送,还可以对端口内容进…

阿里云 超级码力在线编程大赛初赛 第4场 题目3. from start to end

文章目录1. 题目2. 解题1. 题目 样例1: 输入: "abcd" "bcda" 输出: true样例2: 输入: "abcd" "abdc" 输出: false来源:https://tianchi.aliyun.com/oj…

Codeforces Round #697 (Div.3) A~G解题报告与解法证明

题目大体概括 A #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> using namespace std;typedef long long LL; const int N 500; LL a[N]; int sz; bool Check(LL n) {for (int i 0; i < sz; i ){if (n a[i])…

python网络编辑 socket篇

Python之路&#xff1a; socket篇 Socket 网络上的两个程序通过一个双向的通信连接实现数据的交换&#xff0c;这个连接的一端称为一个socket&#xff0c;作为BSD UNIX的进程通信机制&#xff0c;通常也称做“套接字” &#xff0c;是一个通信链的句柄&#xff0c;实现不同程序…

java获取插入数据库表中的自增列值的一个简单方法

PreparedStatement ps conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS); // 第一步 ps.executeUpdate(); //第二步 ResultSet rs ps.getGeneratedKeys(); //获取 rs.next(); int id rs.getInt(1); 转载于:https://www.cnblogs.com/blogyuan/p/3739657…

Codeforces Round #698 (Div. 2) A-E解题报告与解法证明

Codeforces Round #698 (Div. 2) A-E解题报告与解法证明 题目解法总体概括 A Nezzar and Colorful Balls #include <bits/stdc.h> using namespace std;const int N 110; int a[N], f[N];int main() {int t; cin >> t;while (t -- ){static int n;scanf("%…

python开始之路—基础中的基础

python之路&#xff1a; 基础篇 一、Python 1、python是怎么来的 是在1989年吉多范罗苏姆&#xff0c;在圣诞节的时候闲着无聊自己用C语言开发的&#xff0c;一个脚本解释程序&#xff0c;作为ABC语言的一种继承。 2、有哪些公司在用 Youtube、Dropbox、BT、Quor…

关于malloc与字符指针的一些易错点

有如下一段代码&#xff0c;意图把“zhongxiaoming"字符串赋值进以p为首地址的空间为15字节的内存空间&#xff0c;然后释放p所指向的内存&#xff0c;以免出现内存泄露。 该代码出现几个问题&#xff0c;涉及到内存的赋值、malloc函数以及free函数的用法&#xff0c;以及…

第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛(同步赛)解题报告

第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛&#xff08;同步赛&#xff09; 题目总结 A题 切蛋糕 题目信息 解题思路 如果我们将 1/k展开到二进制的形式&#xff0c;那么就可以计算出 需要 多少块1/(2^i) 蛋糕&#xff0c;因此就可以创建出分割的方案&#xff0c;最后进行…