recv

C# Socket编程笔记

妖精的绣舞 提交于 2019-11-29 11:14:42
C# Socket编程笔记 1.按惯例先来介绍下socket Windows中的很多东西都是从Unix领域借鉴过来的,Socket也是一样。在Unix中,socket代表了一种文件描述符(在Unix中一切都是以文件为单位),而这里这个描述符则是用于描述网络访问的。什么意思呢?就是程序员可以通过socket来发送和接收网络上的数据。你也可以理解成是一个API。有了它,你就不用直接去操作网卡了,而是通过这个接口,这样就省了很多复杂的操作。 在C#中,MS为我们提供了 System.Net.Sockets 命名空间,里面包含了Socket类。 2.有了socket,那就可以用它来访问网络了 不过你不要高兴得太早,要想访问网络,还得有些基本的条件(和编程无关的我就不提了):a. 要确定本机的IP和端口,socket只有与某一IP和端口绑定,才能发挥强大的威力。b. 得有协议吧(否则谁认得你这发送到网络的是什么呀)。想要复杂的,我们可以自己来定协议。但是这个就不在这篇里提了,我这里介绍两种大家最熟悉不过的协议:TCP & UDP。(别说你不知道,不然...不然...我不告诉你) 如果具备了基本的条件,就可以开始用它们访问网络了。来看看步骤吧: a. 建立一个套接字 b. 绑定本机的IP和端口 c. 如果是TCP,因为是面向连接的,所以要利用ListenO(

C# Socket编程笔记

只谈情不闲聊 提交于 2019-11-29 11:14:23
1.按惯例先来介绍下socket Windows中的很多东西都是从Unix领域借鉴过来的,Socket也是一样。在Unix中,socket代表了一种文件描述符(在Unix中一切都是以文件为单位),而这里这个描述符则是用于描述网络访问的。什么意思呢?就是程序员可以通过socket来发送和接收网络上的数据。你也可以理解成是一个API。有了它,你就不用直接去操作网卡了,而是通过这个接口,这样就省了很多复杂的操作。 在C#中,MS为我们提供了 System.Net.Sockets 命名空间,里面包含了Socket类。 2.有了socket,那就可以用它来访问网络了 不过你不要高兴得太早,要想访问网络,还得有些基本的条件(和编程无关的我就不提了):a. 要确定本机的IP和端口,socket只有与某一IP和端口绑定,才能发挥强大的威力。b. 得有协议吧(否则谁认得你这发送到网络的是什么呀)。想要复杂的,我们可以自己来定协议。但是这个就不在这篇里提了,我这里介绍两种大家最熟悉不过的协议:TCP & UDP。(别说你不知道,不然...不然...我不告诉你) 如果具备了基本的条件,就可以开始用它们访问网络了。来看看步骤吧: a. 建立一个套接字 b. 绑定本机的IP和端口 c. 如果是TCP,因为是面向连接的,所以要利用ListenO()方法来监听网络上是否有人给自己发东西;如果是UDP

py网络编程学习笔记

纵然是瞬间 提交于 2019-11-29 09:44:43
一、异常处理 异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止),在python中,错误触发的异常如下 而错误分为两种: 1、语法错误 语法错误即为SB错误 2、逻辑错误 逻辑错误有数据类型错误,取值错误等,都是自己逻辑混乱导致。 在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,一个异常标识一种错误 常用异常 1 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x 2 IOError 输入/输出异常;基本上是无法打开文件 3 ImportError 无法引入模块或包;基本上是路径问题或名称错误 4 IndentationError 语法错误(的子类) ;代码没有正确对齐 5 IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] 6 KeyError 试图访问字典里不存在的键 7 KeyboardInterrupt Ctrl+C被按下 8 NameError 使用一个还未被赋予对象的变量 9 SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了) 10 TypeError 传入对象类型与要求的不符合 11 UnboundLocalError

命令备忘 ss

最后都变了- 提交于 2019-11-29 08:36:24
简介: Socket Statistics ( ss )命令类似于 netstat ,它用于显示各种有用的网络套接字信息。 长时间看,已经注意到 netstat 这个命令程序已经过时了。从而代替 netstat 的是 ss 命令。一个全新的 ss 命令使用起来必定有些陌生,不过 ss 许多选项与 netstat 使用的选项类似,但我们还会看到一些差异。 ss 命令是 Linux CentOS 7 中 iproute 软件包的一部分,默认已经安装。 一般来说,网络套接字是由IP地址,传输协议和端口来定义的。这种组合构成了双向连接的一个方面。例如:一个Web服务器可能正在侦听 172.28.204.62:80 上的传入TCP连接,这是套接字。不过需要说明的是套接字不是连接本身,而是连接的端点之一。 下面我讲解如何使用 ss 命令查看各种信息。具体使用语法如下: ss [options] [ FILTER ] 1.列出已建立的连接 默认情况下,如果我们运行 ss 命令而没有指定其他选项,它将显示所有已建立连接的打开的非侦听套接字的列表,例如 TCP , UDP 或 UNIX 套接字。 [root@renwolecom ~]# ss | head -n 5 Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port u

单一职责原则(SRP)

霸气de小男生 提交于 2019-11-29 04:53:01
内聚性: 一个模块的组成元素之间的功能相关性。 就一个类而言,应该仅有一个引起它变化的原因。 当需求变化时,该变化会反映为类的职责的变化,如果一个类承担了多于一个的职责,那么引起它变化的原因就会有多个。 如果一个类承担的职责过多,就等于把这些职责耦合在一起。一个职责的变化可能会削弱或抑制这个类完成其他职责的能力。 这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。 什么是职责? 在SRP中,吧职责定义为“变化的原因”。如果你能够想到多于一个的动机去改变一个类,那么这个类就具有多于一个职责。有时,很难注意到这一点,我们习惯于以组的形式去考虑职责。 Modem接口,大多数人认为这个接口非常合理: public interface Modem { public void dial(String pno); public void hangup(); public void send(char c); public void recv(); } 然而,该接口却显示两个职责(1)连接管理(2)数据通信。 dial和hangup连接处理,send和recv数据通信 这两个职责应该被分开吗?这依赖于应用程序变化的方式。如果应用程序的变化会影响连接函数的签名,那么这个设计就具有僵化性的臭味,因为send和recv的类必须要重新编译。 在这种情况下,这两个职责应该被分离

Python实现远程执行命令(cmd)文件上传与此方法类似

落花浮王杯 提交于 2019-11-29 03:26:00
server端: import socket import subprocess#cmd模块 # subprocess.Popen() sk = socket.socket() address = ('127.0.0.1',8000) sk.bind(address) sk.listen(3) print('writing..........') while True: conn,addr = sk.accept() print(addr) while True: try: data = conn.recv(1024) except Exception: break print(str(data,'utf8')) #拿到一个对象 obj = subprocess.Popen(str(data,'gbk'),shell=True,stdout=subprocess.PIPE) cmd_result = obj.stdout.read() #int类型和bytes类型不能直接转换,需要中间人str,才能进行转换 result_len = bytes(str(len(cmd_result)),'utf8') conn.sendall(result_len) conn.sendall(cmd_result) # if not data:break # inp = input('>>>>>>

多线程的UDP聊天器

孤街浪徒 提交于 2019-11-29 03:17:12
# pcjimport socketimport threading# def recv_msg(udp_socket):# while True:# recv_date = udp_socket.recvfrom(1024)# print(recv_date[0].decode("gbk"),recv_date[1])## def send_msg(udp_socket,dest_ip,dest_port):# while True:# send_date = input("请输入要发送的信息")# udp_socket.sendto(send_date.encode("gbk"),(dest_ip,dest_port))### def main():# # 创建UPD套接字# udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)# # 邦定本地信息# udp_socket.bind(("",9999))# dest_ip = input("请输入对方IP")# dest_port = int(input("请输入PORT"))# #接收信息# t_recv=threading.Thread(target=recv_msg,args=(udp_socket,))# t_send =threading.Thread

python:scket 学习笔记(1)

风格不统一 提交于 2019-11-29 01:43:35
sockt 知识点: (1)TCP/IP (三次握手,四次挥手):https://www.cnblogs.com/Qing-840/p/9283367.html (2)协议:(http、smtp、dns、ftp、ssh、snmp、dhcp)(应用层)、icmp ping(网络层)   所有协议都必须两个动作,send 和 recieve( 就是socket) (3)OSI:物理层、数据链路层( mac)、网络层 ip、传输层、会话层、表示层、应用层 (4)ip(32位):   port(16位 65535个):     0-1023:系统端口     1024-49151:登记端口     49152-65535:短暂端口 sockt模块: (1)Socket Families(地址簇)   socket. AF_UNIX unix 本机进程间通信   socket. AF_INET IPV4   socket. AF_INET6 IPV6 (2)Type: socket.SOCK_STREAMs 流式socket , for TCP (默认) ocket.SOCK_GRAM 数据报式socket , for UDP (3)服务端:   (1)选择连接模式,创建socket对象,地址蔟/   (2)绑定ip端口   (3)监听端口   (4)等待   (5)发送接收   (6)关闭

TCP协议的粘包问题(八)

喜欢而已 提交于 2019-11-29 00:02:01
在socket缓冲区和数据的传递过程介绍中,可以看到数据的接收和发送是无关的,read()/recv() 函数不管数据发送了多少次,都会尽可能多的接收数据。也就是说,read()/recv() 和 write()/send() 的执行次数可能不同。 例如,write()/send() 重复执行三次,每次都发送字符串"abc",那么目标机器上的 read()/recv() 可能分三次接收,每次都接收"abc";也可能分两次接收,第一次接收"abcab",第二次接收"cabc";也可能一次就接收到字符串"abcabcabc"。 假设我们希望客户端每次发送一位学生的学号,让服务器端返回该学生的姓名、住址、成绩等信息,这时候可能就会出现问题,服务器端不能区分学生的学号。例如第一次发送 1,第二次发送 3,服务器可能当成 13 来处理,返回的信息显然是错误的。 这就是数据的“粘包”问题,客户端发送的多个数据包被当做一个数据包接收。也称数据的无边界性,read()/recv() 函数不知道数据包的开始或结束标志(实际上也没有任何开始或结束标志),只把它们当做连续的数据流来处理。 来源: https://www.cnblogs.com/myitnews/p/11433532.html

tcp socket学习

落爺英雄遲暮 提交于 2019-11-28 20:44:13
更新一波学的socket编程,socket还是比较重要的,探测端口,连接服务底层都是socket编程。tcp有server 和 client。client和udp发送差不多。 server端是建立了两个连接,一个是listen监听连接,如果有人连接到了这个端口,那么新创建一个连接,新创建的连接和这个人保持通信。旧的连接可以一直监听。 简单点总结就是Listen-->accept-->recv(1024)-->新连接close()-->旧连接close() #!/usr/bin/env python #-*- coding:utf-8 -*- # @Author : "你们的饭不好吃" import socket tcp_server = socket.socket(socket.AF_INET , socket.SOCK_STREAM) # 绑定端口 tcp_server.bind(("",8888)) # 服务器是8888端口 # 监听端口 tcp_server.listen(127) print("----------------------1---------------------") # 接受到电话 new_client,client_addr = tcp_server.accept() print("-----------------------2-----------