recv

socket 在Unix domain的使用

爱⌒轻易说出口 提交于 2019-11-27 08:17:58
server.c #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <unistd.h> #include <sys/un.h> #include <pthread.h> #include <sys/syscall.h> #define UNIX_DOMAIN "/tmp/test" void *threaddeal(void *arg) { printf("这是一个新线程.\n"); //输出新线程提示 int com_fd = *(int*)arg; static char recv_buf[1024]; memset(recv_buf,0,1024); char snd_buf[1024]; memset(snd_buf,0,1024); strcpy(snd_buf,"server to client"); int num; while(num=read(com_fd,recv_buf,sizeof(recv_buf))) { printf("server recv (%d)) :%s, threadid = %u,lwpid = %u\n",num,recv_buf,pthread_self(),syscall(SYS_gettid)); memset(recv_buf,0

网络编程 实战篇 》》》

半世苍凉 提交于 2019-11-27 07:00:56
一 操作系统基础(需要改网址) 操作系统:(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。 精简的说的话,操作系统就是一个协调、管理和控制计算机硬件资源和软件资源的控制程序。操作系统所处的位置如图1 操作系统位于计算机硬件与应用软件之间,本质也是一个软件。操作系统由操作系统的内核(运行于内核态,管理硬件资源)以及系统调用(运行于用户态,为应用程序员写的应用程序提供系统调用接口)两部分组成,所以,单纯的说操作系统是运行于内核态的,是不准确的。 ​ 图1   **细说的话,操作系统应该分成两部分功能: 一:隐藏了丑陋的硬件调用接口(键盘、鼠标、音箱等等怎么实现的,就不需要你管了),为应用程序员提供调用硬件资源的更好,更简单,更清晰的模型(系统调用接口)。应用程序员有了这些接口后,就不用再考虑操作硬件的细节,专心开发自己的应用程序即可。 例如:操作系统提供了文件这个抽象概念,对文件的操作就是对磁盘的操作,有了文件我们无需再去考虑关于磁盘的读写控制(比如控制磁盘转动,移动磁头读写数据等细节), 二:将应用程序对硬件资源的竞态请求变得有序化 例如:很多应用软件其实是共享一套计算机硬件,比方说有可能有三个应用程序同时需要申请打印机来输出内容

Linux netstat命令详解

馋奶兔 提交于 2019-11-27 05:07:52
简介 Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。 输出信息含义 执行netstat后,其输出结果为 Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 2 210.34. 6.89:telnet 210.34. 6.96: 2873 ESTABLISHED tcp 296 0 210.34. 6.89: 1165 210.34. 6.84:netbios-ssn ESTABLISHED tcp 0 0 localhost.localdom: 9001 localhost.localdom: 1162 ESTABLISHED tcp 0 0 localhost.localdom: 1162 localhost.localdom: 9001 ESTABLISHED tcp 0 80 210.34. 6.89: 1161 210.34. 6.10:netbios-ssn CLOSE Active UNIX domain sockets (w/o servers)

网络编程 --- TCP

北战南征 提交于 2019-11-27 00:50:57
socket通信 服务端 import socket server = socket.socket() # 买手机 不传参数默认用的就是TCP协议 server.bind(('127.0.0.1',8080)) # bind((host,port)) 插电话卡 绑定ip和端口 server.listen(5) # 开机 半连接池 conn, addr = server.accept() # 接听电话 等着别人给你打电话 阻塞 data = conn.recv(1024) # 听别人说话 接收1024个字节数据 阻塞 print(data) conn.send(b'hello baby~') # 给别人回话 conn.close() # 挂电话 server.close() # 关机 客户端 import socket client = socket.socket() # 拿电话 client.connect(('127.0.0.1',8080)) # 拨号 写的是对方的ip和port client.send(b'hello world!') # 对别人说话 data = client.recv(1024) # 听别人说话 print(data) client.close() # 挂电话 连接循环+通信循环 服务端 import socket """ 服务端 固定的ip和port

Python socket receive - incoming packets always have a different size

爷,独闯天下 提交于 2019-11-26 23:58:35
I'm using the SocketServer module for a TCP server. I'm experiencing some issue here with the recv() function, because the incoming packets always have a different size, so if I specify recv(1024) (I tried with a bigger value, and smaller), it gets stuck after 2 or 3 requests because the packet length will be smaller (I think), and then the server gets stuck until a timeout. class Test(SocketServer.BaseRequestHandler): def handle(self): print "From:", self.client_address while True: data = self.request.recv(1024) if not data: break if data[4] == "\x20": self.request.sendall("hello") if data[4]

TCP异常关闭研究分析

大憨熊 提交于 2019-11-26 23:14:24
版权声明:本文由谢代斌原创文章,转载请注明出处: 文章原文链接: https://www.qcloud.com/community/article/108 来源:腾云阁 https://www.qcloud.com/community 研究测试TCP断开和异常的各种情况,以便于分析网络应用(比如tconnd)断网的原因和场景,帮组分析和定位连接异常掉线的问题,并提供给TCP相关的开发测试人员作为参考。 各个游戏接入都存在一定的掉线问题,而且有的游戏项目的掉线比例还比较高,现在互娱自研游戏的网络接入基本上都用的是tconnd和ProtocalHandler组件(该组件请参考附件的《TSF4G_ProtocalHandler开发指导手册》),因此参与其掉线原因分析和研究。 在参与A项目的掉线问题研究分析过程中,tconnd增加了玩家每个连接的流水日志和ProtocalHandler增加了每个连接的Qos上报日志,通过这些日志记录了每一次连接的断开原因和相关统计数据,其中包括了连接异常断开时TCP的底层错误码。 通过对tconnd的流水日志和ProtocalHandler的Qos日志进行统计分析,发现连接异常断开时TCP的错误码大部分是“ 104: Connection reset by peer ”(Linux下)或“ 10054: An existing connection was

socket 错误之:OSError: [WinError 10057] 由于套接字没有连接并且(当使用一个 sendto 调用发送数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。

独自空忆成欢 提交于 2019-11-26 20:35:35
出错的代码 #server端 import socket import struct sk=socket.socket() sk.bind(('127.0.0.1',8080)) sk.listen() conn,addr=sk.accept() str_len1=struct.unpack('i',conn.recv(4))[0] print(sk.recv(str_len1)) str_len2=struct.unpack('i',conn.recv(4))[0] print(sk.recv(str_len2)) conn.close() sk.close() 问题出在上面标红的地方,这里的sk是套接字所以就出现了OSError: ([WinError 10057] 由于套接字没有连接并且(当使用一个 sendto 调用发送数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。)的错误, 解决办法:只需要将sk改成 conn 即可 来源: https://www.cnblogs.com/HByang/p/11332828.html

上传电影代码

蹲街弑〆低调 提交于 2019-11-26 19:58:31
客户端: import socket import os import struct import json client = socket.socket() client.connect(('127.0.0.1',8085)) print('start....') while True: BASE_PATH = r'F:\1新建文件夹\新建文件夹' movie_list = os.listdir(BASE_PATH) print('请选择下列电影进行上传:') for ind,movie in enumerate(movie_list,1): print(ind,movie) choice_index = int(input('请输入你想要上传的电影序号:').strip()) movie_name = movie_list[choice_index-1] filename = os.path.join(BASE_PATH,movie_name) movie_size = os.path.getsize(filename) d = {'name':movie_name,'file_size':movie_size} json_d = json.dumps(d) json_d_bytes = json_d.encode('utf-8') header = struct.pack(

打印进度条

老子叫甜甜 提交于 2019-11-26 19:58:07
import sys import time def progress(percent,width=50): if percent >= 1: percent=1 show_str=('%%-%ds' %width) %(int(width percent) '█') print('\r%s %d%%' %(show_str,int(100*percent)),file=sys.stdout,flush=True,end='') =========应用========== data_size=1025 recv_size=0 while recv_size < data_size: time.sleep(0.1) #模拟数据的传输延迟 recv_size+=4 #每次收 percent=recv_size/data_size #接收的比例 progress(percent,width=70) #进度条的宽度70 来源: https://www.cnblogs.com/zuihoudebieli/p/11331770.html

模拟ssh远程执行命令

别来无恙 提交于 2019-11-26 19:57:40
模拟ssh远程执行命令 实现在客户端输入执行命令后,返回执行命令的信息.如输入dir,显示当前目录下的所有文件和文件夹。 send与recv对应,不要出现两边都是相同的情况。recv是跟内存要数据,至于数据的来源,你无需考虑。 struct模块 import struct # res = 'akdjsladlkjafkldjfgsdafhjksdfhfdgfdsgdfgssgdglkjdfsfdsadkfjlksdjf;klsdkl;fk;lsfdgklj;sfkldgj;kldfg;lfkd;lgk;lsdkfg;lkfd;glskljdklsajkldsa' # print('最原始的',len(res)) # 当原始数据特别大的时候 i模式打包不了 需要更换模式? # 如果遇到数据量特别大的情况 该如何解决? d = { 'name':'jason', 'file_size':3455435435345354524534532456546546565466564366463654543453454353455, 'info':'为大家的骄傲' } import json json_d = json.dumps(d) print(len(json_d)) # 147是json串的长度 res1 = struct.pack('i',len(json_d)) print(len