recv

windows下对socket的send和recv的超时设置,并附一个简洁明了的socket简单demo

余生长醉 提交于 2019-12-02 05:35:36
设置方法 int nNetTimeout=10000;//10秒, //设置发送超时 setsockopt(m_socket,SOL_SOCKET,SO_SNDTIMEO,(char *)&nNetTimeout,sizeof(int)); //设置接收超时 setsockopt(m_socket,SOL_SOCKET,SO_RCVTIMEO,(char *)&nNetTimeout,sizeof(int)); 服务 1 #include <stdio.h> 2 #include <winsock2.h> 3 4 #pragma comment(lib,"ws2_32.lib") 5 6 int main(int argc, char* argv[]) 7 { 8 //初始化WSA 9 WORD sockVersion = MAKEWORD(2, 2); 10 WSADATA wsaData; 11 if (WSAStartup(sockVersion, &wsaData) != 0) 12 { 13 return 0; 14 } 15 //创建套接字 16 SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 17 if (slisten == INVALID_SOCKET) 18 { 19 printf(

Linux C Socket: Blocked on recv call

不想你离开。 提交于 2019-12-02 04:06:16
In my application i have created a thread for a simple http server, then from within my application i tried to connect to http server but control is blocked/hanged on recv call. But if try to connect to my application's http server using linux GET command, I will be connected to http server successfully. As per my understanding by searching the google i found that this is not the right approach. But if i want to do this, in what should i create the sockets so that i can connect o my http server from within the application. Below is how my http server socket created pthread_create(&pt_server,

进程

一个人想着一个人 提交于 2019-12-02 01:42:56
目录 1.软件架构 2.网络编程 3.socket编程 1.软件架构 c/s架构 client客户端 server服务端 优点:软件的使用稳定,可以节省网络资源 缺点:若用户想在同一个设备上使用多个软件,必须下载多个客户端。软件的每一次更新,客户端也必须跟着更新 c/s架构的软件 QQ,Pycharm b/s架构 browser:浏览器 server:服务器 优点:以浏览器充当客户端,无需用户下载多个软件,也无需用户下载更新软件版本。用户以浏览器充当客户端,直接在浏览器访问需要使用的软件。 缺点:消耗网络资源过大,当网络不稳定的时候,网络的使用也不稳定。 2.网络编程 实现远程通信必须具备: 物理连接介质:网卡 互联网协议 计算机之间沟通的介质:互联网协议 互联网协议: 互联网协议又称为网络七层协议,OSI七层协议,OSI是一个世界标准组织 物理连接层 基于电信号发送二级制的数据01001001001010010 数据链路层 数据链路层的以太网协议,专门用于处理基于电信号的二级制数据 以太网协议: 规定好电信号的数据分组方式 每一台连接网线的电脑必须要有一块网卡 网卡由不同的厂商生成的 每块网卡都会有世界上独一无二的12位编号 前6位:厂商号 后6位:流水号 交换机:可以让多台电脑连接到一起。 基于以太网协议发送数据 特点: ​ 广播,单播 弊端: ​ 广播风暴,不能跨局域网通信

异步编程学习

独自空忆成欢 提交于 2019-12-02 00:31:52
原文章来源于: https://mp.weixin.qq.com/s?__biz=MzIxMjY5NTE0MA==&mid=2247483720&idx=1&sn=f016c06ddd17765fd50b705fed64429c原项目GitHub: https://github.com/denglj/aiotutorial原文章写得很精彩,但有些代码还是可以优化下的。而且这文章一直只有上篇,可惜了。接下来按个人见解,从代码角度解析下这篇文章:前提知识讲解:1、计算机资源:常分为CPU资源、内存资源、硬盘资源和网络资源2、进程阻塞:正在运行的程序,由于自身某个模块需要使用硬盘或网络I/O资源等,而系统又未及时响应,导致进程处于待机状态,直至等待事件作出回应后才会被唤醒。3、进程非阻塞:同理,在获取某些资源时,不会等待结果响应,而是继续处理其他模块。我们以socket为例,如下可获取阻塞与非阻塞两种编程 import socket sock = socket.socket() socket.setblocking(True) # 默认就是阻塞。即套接字 建立连接/发送请求/接受请求 的时候,是阻塞的。socket.setblocking(False) # 设置为非阻塞,即上述请求过程不会阻塞,而是继续处理其他模块。 使用原生asyncio编写异步程序: 在此代码中

第二十九天作业

萝らか妹 提交于 2019-12-02 00:02:26
今日作业 # 写一个基于TCP协议套接字,服务端实现接收客户端的连接并发。 # 服务端 import socket from multiprocessing import Process def recv(conn,addr): while True: recv_msg = conn.recv(1024).decode('utf-8') print(f'收到来自{addr}的信息[{recv_msg}]') conn.send(recv_msg.encode('utf-8')) if __name__ == '__main__': server = socket.socket() server.bind( ('127.0.0.1', 8000) ) server.listen(2000) while True: conn, addr = server.accept() print(f'用户{addr}连接!') p = Process(target=recv,args=(conn,addr)) p.start() # 客户端 import socket client = socket.socket() client.connect( ('127.0.0.1',8000) ) while True: send_msg = input('>>>') if send_msg == 'q'

Help with Sending/ Receiving UDP packets - C Sockets

喜夏-厌秋 提交于 2019-12-01 22:55:58
问题 Ok, if you look at some of my previous questions, I've been working on getting a simple connection up and running with C sockets (I'm still fairly new to the whole networking aspect of an program, but everyone has to start somewhere, right?). I've included the code below that I have so far and when I execute it, I get no errors, but at the same time, I don't get the packet on the other end. By the way, I'm programming multicast sockets in objective-C and "msgStatus" is just a label in my GUI

c++ posix sockets recv functionality

时光毁灭记忆、已成空白 提交于 2019-12-01 22:38:19
I have a perhaps noobish question to ask, I've looked around but haven't seen a direct answer addressing it and thought I might get a quick answer here. In a simple TCP/IP client-server select loop using bsd sockets, if a client sends two messages that arrive simultaneously at a server, would one call to recv at the server return both messages bundled together in the buffer, or does recv force each distinct arriving message to be read separately? I ask because I'm working in an environment where I can't tell how the client is building its messages to send. Normally recv reports that 12 bytes

socket大文件传输(解决粘包)

喜欢而已 提交于 2019-12-01 22:24:18
解决粘包 模块struct struct.pack(type,num) type:是num的类型 num :是一个数字 r = struct.pack 把一个数字打包成一个四字节的bytes struct.unpack(type,r) 功能:解包,把r解成原数字,结果是一个元组,原数字在元组的下标位0的位置 #解决粘包:原理是在服务器接收到字典长度后,根据字典长度去recv字典中的内容,就不会造成recv最后一次接收完后剩下的空间留给部分文件内容所造成字典内容和文件内容黏在一起 #实现文件的上传功能 #client层 import socket import json import struct import os sk=socket.socket() sk.connect(("10.70.2.143",8080)) option={"1":"upload","2":"download"} for index,value in option.items(): print(index,value) num=input("请输入您的选择") if num=="1": dic={"opt":option.get(num),"filename":None,"filesize":None} file_path=input("请输入所需要上传的文件的绝对路径") filename=os

linux 网络编程

帅比萌擦擦* 提交于 2019-12-01 21:49:14
int socket (int domain, int type, int protocol); 建立新的通信端口 int domain  网络层协议 可以填 AF_INET 表示IPv4 AF_INET6 表示IPv6 int type  传输类型 可以填 SOCK_STREAM 表示TCP SOCK_DGRAM 调试UDP int protocol  指定传输协议编号,这里填 0 返回值:成功→套接字文件描述符  失败→ -1 int serfd; serfd = socket(AF_INET,SOCK_STREAM,0); if(serfd == -1) { perror(“socket fail”); exit(-1); } int bind (int sockfd, const struct sockaddr *addr,socklen_t addrlen); 将服务器的地址信息与套接字进行绑定 int sockfd          套接字文件描述符 const struct sockaddr *addr  指向服务器地址信息的指针 struct sockaddr_in {   unsigned short int sin_family;  网络层协议对应的宏 AF_INET表示IPv4   uint16_t sin_port;        端口号   struct

Java BIO socket

≡放荡痞女 提交于 2019-12-01 19:42:45
package org.rx.socks; import lombok.extern.slf4j.Slf4j; import org.rx.core.LogWriter; import org.rx.core.NQuery; import org.rx.beans.DateTime; import java.io.IOException; import java.net.InetSocketAddress; import java.net.Socket; import java.util.Map; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedDeque; import static org.rx.core.Contract.require; @Slf4j public final class SocketPool extends Traceable implements AutoCloseable { public static final class PooledSocket implements AutoCloseable {