TCP消息被凝聚在一起
我有一个正在写给网络的Java应用程序.它在764b,+/- 5b的区域中编写消息. PCAP表明该流正在散布IP,我们无法解释这一点. Linux 2.6.18-238.1.1.el5 strace显示: ( strace -vvvv -f -tt -o strace.out -e trace = network -p $ pid ) ) 1: 2045 12:48:23.984173 sendto(45, "\0\0\0\0\0\0\2\374\0\0\0\0\0\3\n\0\0\0\0\3upd\365myData"..., 764, 0, NULL, 0) = 764 2: 15206 12:48:23.984706 sendto(131, "\0\0\0\0\0\0\2\374\0\0\0\0\0\3\n\0\0\0\0\3upd\365myData"..., 764, 0, NULL, 0 3: 2046 12:
0 2023-05-21
编程技术问答社区
在sendto()函数-C语言中发送结构
因此,我试图使用sendto()函数将消息发送给客户端. sendto()函数的原型是: ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen); ,但我想发送一个结构作为第二个参数.我有可能这样做吗?还是buf必须是字符串? 编辑:您知道,我必须能够发送此信息: "一条消息由"标题"组成,然后是"有效载荷". 您的消息标头应包含以下内容: uint8_t version; /* must be 1. If you receive anything else, discard*/ uint8_t ttl; /* must be 1. If you receive anything else, discard*/ uint16_t payl
26 2023-04-21
编程技术问答社区
使用recvfrom()和sendto()发送结构
我正在使用 c语言,这是服务器和客户端的通用平台. 我有一个特定类型的结构,我想从服务器发送给客户端. 例如,例如 服务器代码 //necessary declarations struct hostent *hp; hp=gethostbyname("www.google.com"); sendto(sockDes,&hp,sizeof(hp),0,(struct sockaddr *)&cli_addr,sizeof(cli_addr)); 客户端代码 struct hostent *hp; msg=recvfrom(mysock,&hp,sizeof(hp),0,(struct sockaddr)&serv_addr,&size_len); 因此,基本上我想将结构从服务器发送到客户端.但是从上面的代码中,我会得到细分故障,我不确定这种结构传输是否可行.有什么路吗? 解决方案 首先,您必须进行malloc()才能为struct
4 2023-04-21
编程技术问答社区
组合sento()写writev()?
我已经设置了一个UDP套接字,并在每个呼叫时都带有其他收件人呼叫sendto(). 我想使用writev()来使scater/cathing io受益,但是writev()不允许我像sendto()中指定收件人addr/port.有什么建议吗? 解决方案 ,如果您使用connect>提前指定终点,则可以使用writev将一组合并的缓冲区发送到A 单个终点.来自connect(2)的(OSX)manpage: 数据报插座可以多次使用Connect()更改其关联 you 不能使用writev将每个缓冲区发送到其他端点. 使用connect / writev而不是sendto* n 的潜在缺点是,它是writev的另一个系统调用. 如果收件人集有限(并提前知道),则最好是每个收件人使用单独的socket,而每个插座只能使用connect. 其他解决方案 在Linux上,有sendmmsg(2) sendmmsg()系统调用是sendmsg(2
12 2023-04-21
编程技术问答社区
如何使用sendto()来发送一个结构
我创建了结构: struct buffer { string ProjectName ; string ProjectID ; } buffer buf; buf.ProjectID = "212"; buf.ProjectName = "MyProj"; 现在要使用sendto方法发送此结构,我正在打字结构并将其发送回下文: char *sendbuf = (char*)&buf; sentbytes = sendto(sock,sendbuf,strlen(sendbuf),0,(sockaddr*)&their_addr,sizeof(their_addr)); 但是,当我施放我的struct ti char*时,实际数据正在丢失其值,而调试时,我看到sendbuf包含了其他一些值. 可以让我知道如何使用sendto发送上述结构. 解决方案 您需要使用POD创建结构,字符串不是您可以以这种方式使用的内容.相反,您需要声明它之类的内
22 2023-04-04
编程技术问答社区
在MacBook Pro上,Link-scope IPv6多播数据包突然无法路由?
这是一个有点晦涩的问题,但我很难过,我认为也许有人对这个问题有更多的线索. 我的同事已经成功运行了一个内部应用程序,该应用程序使用了MacBook Pro上使用IPv6多播的内部应用程序,但今天Mac决定停止路由多播数据包.特别是,该程序打印此错误: senddataudp(ff02 :: bead:cede:deed:feed@4)在网络接口[name = [en0] description = [] ip = [fe80 :: 222:41ff:fe21:dfd4@4] netmask = [fe80 :: 222:41ff:ip = [] [FFFF:FFFF:FFFF:FFFF ::]广播= [:::]] ...它很好地描述了出了什么问题...它尝试将UDP数据包发送到所示的IP地址,而Send()失败了Errno = Ehostunreach. 我不明白的是,什么可能导致IPv6链接多播地址"无法到达"?如果我对链接范围的多播的理解正确,则数据包只需要删除本
2 2023-04-04
编程技术问答社区
在Python中接受文件参数(来自发送至上下文菜单)
我要开始指出我几乎没有python经验. alt Text http:///www.aquate.us/u/u/u/u/u/u/u/998642386423875612399.jpet/a> 您可能知道,只需在Windows PC上的发送到文件夹中删除快捷方式,就可以允许程序将文件作为参数. 我将如何编写一个将此文件作为参数的Python程序? ,如果有人有机会,作为奖励 - 我如何将其与urllib2集成以将文件发布到我的服务器上的PHP脚本? 上 预先感谢. 编辑 - 另外,我如何在sendto菜单中显示某些东西?我的印象是,您只需将快捷方式放入SendTo文件夹中,它会在菜单中自动添加一个选项... 没关系.我弄清楚我做错了什么:) 解决方案 找出拖动文件是什么: http://docs.python. org/library/sys.html#sys.argv 打开它: #open 在以下内容中阅读: http://docs.pypy
12 2023-03-30
编程技术问答社区
recvfrom: 坏地址, sendto: 协议不支持的地址族
我正在尝试在C中实现一个小小的UDP服务器/客户端应用程序,并在服务器端遇到两个错误: recvfrom:糟糕地址 && prortto sendto:地址family不支持地址nomers协议.我搜索了这个错误并谷歌搜索了答案,但是不幸的是,它们并没有真正的帮助...也许我以错误的方式投下了一个参数,但不要得到它.我希望你能给我一个提示:) #include #include #include #include #include #include #define BUFFSIZE 256 #define IP "127.0.0.1" #define PORT 7755 int main(void){ int socket_fd = socket(AF_INET, SOCK_DGRAM, 0); char buffer[1
70 2023-03-10
编程技术问答社区
Linux C++ IPv6 UDP Multicast sendto失败,errno EADDRNOTAVAIL (99) 无法分配请求的地址。
我正在尝试发送IPv6 UDP多播消息. 测试代码的一部分显示了两个部分,一个用于发送IPv6多播消息,另一个用于发送IPv4多播消息. IPv4的代码正常. ipv6代码总是失败,sendto,返回eaddrnotavail(99)无法分配请求的地址. ... if (ipV6Select) { // Create IPv6 DGRAM Socket int sock = socket(AF_INET6, SOCK_DGRAM, 0); if (sock
2 2023-03-09
编程技术问答社区
由sendto()/recvfrom()周期性延迟引起的UDP套接字的周期性延迟尖峰,Linux RT-PREEMPT系统的C++版本
我已经设置了两个覆盆子PI用于使用UDP套接字,一个用作客户端,一个用作服务器.内核已用RT抢先(4.9.43-RT30+)修补.客户端充当服务器的回声,以允许计算往返延迟(RTL).目前,在服务器端使用2个线程的发送频率:一个用于将消息发送给客户端,一个用于从客户端接收消息.这些线程设置为使用循环计划的时间表为95. 服务器构造了一个消息,其中包含发送消息的时间以及开始发送消息以来的过去时间.此消息将从服务器发送到客户端,然后立即返回服务器.从客户端接收到消息后,服务器计算往返延迟,然后将其存储在.txt文件中,用于使用Python绘制. 问题是,在分析图表时,我注意到RTL中有周期性的尖峰.图像的顶部图:我尝试并注意到的事情: 发送消息的大小没有效果.我尝试了较大的消息(1024个字节)和较小的消息(0字节),并且周期性延迟不会改变.这向我表明,这不是一个缓冲问题,因为没有任何填补? 发送消息的频率确实起着很大的作用,如果频率加倍,则延迟峰值的发生频率是两倍.然后
4 2023-03-08
编程技术问答社区
尝试使用`sendto()`与以太网`socket(af_inet,...,...)`(IP输出数据包)在Linux上使用`eperm`错误
这是一个大量减少的代码样本,按照我的代码从我的 ercaguy_hello_hello_hello_world 这里repo : socket__geeksforgeeks_udp_client_GS_edit_GREAT.c: #define SOCKET_TYPE_UDP_IPV4 AF_INET, SOCK_DGRAM, 0 // Create an IPv4 UDP socket to send Ethernet packets out to a connected device int socket_fd = socket(SOCKET_TYPE_UDP_IPV4); // Send a packet via `sendto()` const char msg_to_send[] = "Hello from client."; ssize_t num_bytes_sent = sendto(socket_fd, msg_to_send, si
0 2023-03-08
编程技术问答社区
在发送UDP数据包时出现 "无效参数",但哪一个?
我的C ++应用程序将二进制数据作为UDP数据包发送. sendto()调用返回einval(无效的参数),但我看到的参数没有任何错误. 我做了一个应用程序,这里是狂欢系统的调用: socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 33 setsockopt(33, SOL_IP, IP_RECVERR, [1], 4) = 0 fcntl(33, F_SETFD, FD_CLOEXEC) = 0 bind(33, {sa_family=AF_INET, sin_port=htons(1510), sin_addr=inet_addr("127.0.0.1")}, 16) = 0 sendto(33, "\2055\5\0\0\0\1\0\0\0\1\20 \0t\0c\300Ny\274B\10*\206H\206\367\r\2\5\0\200\200\331'\344\272\322\362sD\277\312\30
34 2023-03-01
编程技术问答社区
我如何在我的C#应用程序中使用windows'的SendTo选项,使用数据网格视图
我在DataGridView中显示文件时,请单击该特定文件夹名称中的目录中的文件.现在使用上下文菜单,我想在该上下文菜单中添加此sendto选项,并希望将该文件发送到任何可移动媒体. 解决方案 您在Windows"发送"菜单中看到的程序的快捷方式存储在%APPDATA%\Microsoft\Windows\SendTo文件夹中. 阅读此文件夹的内容并在网格上下文菜单中显示选项. 快捷方式是.LNK文件.从LNK文件中解析EXE的名称,并使用System.Diagnostics.Process.Run 调用EXE 这是您可以从LNK文件解析EXE位置的方法 其他解决方案 尝试中间化此示例,它可以在不同的列上启用不同的选项: //Define different context menus for different columns private ContextMenu contextMenuForColumn1 = new ContextMenu()
26 2023-02-14
编程技术问答社区
如何通过RAW套接字发送修改过的IPv6数据包?
我试图通过C Linux的RAW套接字发送自定义IPv6标头. 我已经使用IP_HDRINCL套接字选项在IPv4中取代了IPv4,但是,IPv6没有等效的. 我找到了一个解决方法在这里建议使用socket(AF_INET6, SOCK_RAW, IPPROTO_RAW)效果作为启用IP_HDRINCL插座选项. 该插座是成功创建的,直到我使用修改后的标头sendto函数之前,我才会遇到任何错误. 我像这样设置了插座: static int socketFd = 0; static struct sockaddr_in6 remote; int main() { socketFd = socket (PF_INET6, SOCK_RAW, IPPROTO_RAW); if (socketFd
42 2023-02-04
编程技术问答社区
C-sendto中的UDP服务器/客户端错误。协议不支持的地址族
我正在编写一个简单的说明性UDP服务器客户端.服务器应基于客户端输入计算客户端的网络字节顺序,然后将其发送回客户端.我一直在尝试整天解决此错误.任何帮助都将被赞赏.这是服务器启动和输出: ./udpserver.out 4545 from.sin_family: 12079 Little Endian ERROR UDP_SRV_004 - can not send message to client: Address family not supported by protocol 客户端开始: ./udpclient.out localhost 4545 服务器代码: #include #include #include #include #include #include #include
16 2023-02-04
编程技术问答社区
插座sendto()返回EINVAL
我试图在C中发送一个UDP数据包.我有以下sendto(): char* msg = "Hello"; //ret is the return value of getaddrinfo, the address is AF_INET (IPv4) //and the sock_type is SOCK_DGRAM (UDP) struct sockaddr_in *ip = (struct sockaddr_in *)ret->ai_addr; if ((sendto(sock, msg, strlen(msg), 0, (struct sockaddr *)ip, sizeof(struct sockaddr *))) != -1) { printf("msg sent successfully"); } else { printf("Error sending msg: %s\n", strerror(errno)); }
118 2023-02-03
编程技术问答社区
unix套接字错误14:EFAULT(坏地址)。
我有一个非常简单的问题,但是我整个周末都没有设法找到任何答案.我正在使用sendto()函数,它正在返回错误代码14:efault.男人的页面将其描述为: "An invalid user space address was specified for an argument." 我坚信这是在谈论我正在指定的IP地址,但是现在我怀疑它可能是消息缓冲区的内存地址 - 我找不到 - 我找不到任何地方都有任何澄清,任何人都可以清除吗? 解决方案 EFAULT如果某些参数传递给sendto(或更一般到任何系统调用)的内存地址无效.关于您的Syscall,将其视为内核土地上的一种SIGSEGV.例如,如果您通过无效或无效的缓冲指针(用于阅读,写作,发送,收回...),则会得到 参见 errno(3), sendto(2)等...男人页. EFAULT完全与IP地址无关. 其他解决方案 最小可运行的示例,getcpu 只是为了使事情变得更具体,我们可以查看
16 2023-02-03
编程技术问答社区
sendto : 资源暂时不可用(errno 11)。
我正在遇到sendto. 我有一个接收者,他们接收具有recvfrom的Upd数据包,然后使用sendto回复发件人. 不幸的是,我得到了errno 11(资源暂时不可用).我正在使用两个套接字. 实际发送第一个数据包但之后不是那些: sendto :: success 错误:0. sendto :: Resource暂时不可用 错误:11. sendto :: Resource暂时不可用 ... 这是我的代码的提取物: int sockfd, sockSend; if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0))
48 2023-02-03
编程技术问答社区
在C语言程序中发送ICMP数据包
我正在尝试在c中创建一个ICMP Ping测试程序,但是难以成功发送数据包. sendto函数返回字节数和一切,但实际没有数据包.我用目的地计算机上的Wireshark验证了这一点.主机上的常规ping罚款并在Wireshark中显示. 这是我的代码: #include #include #include #include #include #include #include #include #include #include #include #include #include unsigned short
10 2023-02-03
编程技术问答社区
套接字编程:sendto总是以errno 22 (EINVAL)失败。
我总是没有发送任何字节,使用此代码的ernno为22(Einval,无效的参数). destination_host是在其他地方设置的,已知有效,因此我真的看不到发生了什么. MAXMSGSIZE是1000.没有错误或警告.我正在用-Wall -Werror -pedantic 编译 char *data_rec; u_int data_len; int sockfd; uint16_t *ns; struct sockaddr_in address; struct sockaddr *addr; char *ip; int i; int errno; int bytes_sent; data_len = MAXMSGSIZE; data_rec = malloc(sizeof(char)*MAXMSGSIZE); ns = malloc(MAXMSGSIZE*sizeof(uint16_t)); ip = malloc(MAXMSGSIZE*sizeof(char));
36 2023-02-03
编程技术问答社区