python udp的问题,收不到服务器的返回数据

本来是做个dns解析程序,本地记录找不到的话再向别的服务器请求,但是现在只写了一部分,直接将来自客户端的请求转发给202.106.0.20,但是完全没反应,收不到服务器返回的数据报。求解答

import os
import socket
import threading

#字典,用来存放域名-ip键值对
domain_ip={}

#去掉域名字符串最后的换行符
def DelLastChar(str):
str_list=list(str)
str_list.pop()
return "".join(str_list)

#从数据报中分离出网址字节码存入list
def get_request(your_list):
my_list = []
new_list = []
my_list.extend(your_list)
re_list = []
thelen = my_list[0]
try:
while thelen != 0:
new_list = new_list + my_list[1:thelen+1]
my_list[0:thelen+1] = []
thelen = my_list[0]
new_list.append('.')
except IndexError:
print ("The format of datagram is false!")
new_list.pop()
return new_list

#将网址字节码转换成域名
def digit_to_domian(d_list):
length=len(d_list);
for index in range(length):
if d_list[index]!='.':
d_list[index]=chr(d_list[index])
return ''.join(d_list);

def make(re_ip,msg):
tmp_list = []
for ch in msg:
tmp_list.append(ch)

tmp_list[4:12] = ['\x00','\x01','\x00','\x01','\x00','\x00','\x00','\x00']

tmp_list = tmp_list+['\xc0','\x0c','\x00','\x01','\x00\

','\x01','\x00','\x00','\x02','\x58','\x00','\x04']

dive_ip = socket.inet_aton(re_ip)
ch_ip = []
for each_ch in dive_ip:
    ch_ip.append(each_ch)
tmp_list = tmp_list + ch_ip
re_msg = ''.join(tmp_list)
return re_msg

#从本地文件读入域名-ip到字典中
data = open('dnsrelay.txt')
for each_line in data:
domain_ip.setdefault(DelLastChar(each_line.split(' ',1)[-1]),each_line.split(' ',1)[0])
data.close()

#监听本地53端口
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(('127.0.0.1', 53))
print('Bind UDP on 53...')
while True:
data,(client,port) = s.recvfrom(1024)
if(port==53):
print(data)#this line can not run
else:
request = []
request = list(data)
domain=digit_to_domian(get_request(request[12:]))
s.sendto(data,('202.106.0.20',53))
print(domain)

2个回答

但是不是这个原因啊,现在的问题是给服务器发送成功,但是服务器没返回数据

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
UDP服务器有时候收不到数据的问题?
我写了一个UDP的服务器和客户端,客户端每秒发送1k左右的数据。rn现象是这样的,开启服务器,打开客户端发送数据,这时候服务器是收得到数据的。如果这是关闭服务器,让客户端继续发送数据大概5秒钟,然后关闭客户端。rn再开启服务器,打开客户端发送数据,这时候服务器就会收不到数据。把服务器和客户端关闭一段时间后再开启,有时候服务器收得到数据,有时候收不到数据,这个情况是几乎是随机的,有时候在服务器代码里随便加一个空行编译一下就可以收到数据了。rn如果服务器在收得到数据的情况下一直不关闭程序,这时候无论客户端关闭还是停止发送数据,只要再发送数据,服务器都可以收得到数据。rnrn我想问的是,为什么当关闭服务器,而客户端继续发送数据几秒钟后,就一定会出现开启UDP服务器收不到数据的情况?这是什么引起的?要怎么解决?
2003服务器上,UDP端口收不到数据
我用Delphi写了的一个监听UDP186端口的应用,在办公室的局域网的多台win2003服务器中里都能收到数据,可放在公网的一台win2003服务器上就不行了,收到不数据了。把发数据的程序都放到公网的服务器上,让它自己放给自己就能收到,不像是本机端口冲突占用这种情况。请问这是怎么回事呢,是不是服务器机房里有拦截还是怎么回事?
UDP 通信 客户端收不到服务器数据
UDP通信过程中开发板作为客户端,客户端可以一直发送数据,但过几分钟中后客户端就收不到服务器端发送的数据了(刚开始可以接收服务器数据)rn通信期间服务器一直ping客户端的话,客户端一直可以收到数据rn请问这是什么原因
UDP数据传输,收不到数据.
h_socksend= socket(AF_INET,SOCK_DGRAM,0);//发送端套接字设置rn BOOL bsocket=TRUE;rn SendLocalAddr.sin_family=AF_INET;rn SendLocalAddr.sin_addr.s_addr=INADDR_BROADCAST;rn SendLocalAddr.sin_port=htons(9050);rn bool opt=true;rn setsockopt(h_socksend,SOL_SOCKET,SO_BROADCAST,(char FAR *)&opt,sizeof(opt));rnsendto(h_socksend, (char*)senddata, len, 0, (sockaddr*)&SendLocalAddr, nlen);//将senddata内的数据发送rnrnrn h_sock = socket(AF_INET,SOCK_DGRAM,0);//接收端套接字rn BOOL bBroadcast=TRUE; rn int ret = setsockopt(h_sock,SOL_SOCKET,SO_BROADCAST,(const char*)&bBroadcast,sizeof(int));rn int nRecvBuf=20*1024;//设置为20Krn ret = setsockopt(h_sock, SOL_SOCKET, SO_RCVBUF, (const char *)&nRecvBuf,sizeof(nRecvBuf));rn cli.sin_addr.s_addr = htonl(INADDR_ANY);rn cli.sin_family = AF_INET;rn cli.sin_port = htons(9050);rn ret = bind(h_sock,(SOCKADDR*)&cli,sizeof(cli));rnWSAAsyncSelect(h_sock, hwnd, WM_SOCKET, FD_READ);//利用WSAAsySelect创建消息响应函数,当网络中出现FD_READ时,产生WM_SOCKET消息.rnrn问题是,接收端根本就没有FD_READ标志出现.rn这是为什么呢?(senddata是byte型的数组)rn
发送的UDP数据收不到?
我的程序分客户端和服务器两个,客户端向服务器发送UDP数据,客户端在局域网内的一台PC上运行,服务器在一台公网机器上运行,服务器的网络配置比较特别:托管该服务器的机房有两根专线一为电信一为网通,分别分配网通IP:*.*.*.*和电信IP:*.*.*.*,该服务器做了一个二级域名对应这两个IP。服务器有两块网卡,其红一块没有连接,并在设备管理器中停用了,两个IP都邦在一块网卡上。rnrn目前的问题是如果在程序中发送UDP数据时,直接写一个IP地址,那么程序运行正常,但如果我输入域名,然后用gethostbyname取得IP后,再用这个IP发送数据,服务器端就收不到数据。rnrn后来我把两个IP中的一个去掉了,但问题依旧。rn此外我用windump抓包发现两种方式数据都发送到了服务器,但采用域名的那种方式,数据好像没有从系统走到程序中(程序中有断点,没断着)。rnrn而且服务器很干净,没有什么乱七八糟的软件。rnrn不知道兄弟们以前碰没碰到过这种问题。谢谢大家指点。
UDP 收不到数据.
代码如下:rnrn[code=C/C++]#include rn#include rnBOOL InitWinsock();rnvoid main()rnrn SOCKET socket1;rnrn InitWinsock();rn struct sockaddr_in local;rn struct sockaddr_in from;rn int fromlen =sizeof(from);rn local.sin_family=AF_INET;rn local.sin_port=htons(1000); ///监听端口rn local.sin_addr.s_addr=INADDR_ANY; ///本机rnrn socket1=socket(AF_INET,SOCK_DGRAM,0);rn //socket1 = WSASocket(AF_INET, SOCK_DGRAM,0,NULL,0,rn // WSA_FLAG_MULTIPOINT_C_LEAF|WSA_FLAG_MULTIPOINT_D_LEAF|WSA_FLAG_OVERLAPPED); rn rn bind(socket1,(struct sockaddr*)&local,sizeof local);rn rn while (1)rn rn char buffer[1024]="\0";rn printf("waiting for message from others-------------\n");rn if (recvfrom(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&from,&fromlen)!=SOCKET_ERROR)rn rn printf("Received datagram from %s--%s\n",inet_ntoa(from.sin_addr),buffer);rn ////给cilent发信息rn sendto(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&from,fromlen);rnrn rn Sleep(500);rn rnrn closesocket(socket1);rnrnrnrnrnBOOL InitWinsock()rnrn int Error;rn WORD VersionRequested;rn WSADATA WsaData;rn VersionRequested=MAKEWORD(2,2);rn Error=WSAStartup(VersionRequested,&WsaData); //启动WinSock2rn if(Error!=0)rn rn return FALSE;rn rn elsern rn if(LOBYTE(WsaData.wVersion)!=2||HIBYTE(WsaData.wHighVersion)!=2)rn rn WSACleanup();rn return FALSE;rn rn rn rn return TRUE;rn[/code]
Java网络编程udp接收端收不到数据的问题
本人新手 最近在学习Java的网络编程 遇到一个问题 代码如下图。 主机名称和端口都已设置正确,但就是接受不到数据。 请大家帮忙指点一下 谢谢!~[img=https://img-bbs.csdn.net/upload/201412/28/1419745836_524923.png][/img]
关于UDP一段时间后接收不到数据的问题
[size=18px]最近在做一个项目,是用UDP一对多的传输数据,用Qt编写的。程序刚开始运行的时候,UDP还是可以正常接收数据,过一段时间后,UDP就接收不了,而且没有出现任何错误提示,程序重启后又可以接收数据了。这个现象是偶尔出现的,关键代码如下,请大家帮忙看下该如何解决呢?谢谢。[/size]rnrnrn[img=https://img-bbs.csdn.net/upload/201609/08/1473295772_899072.png][/img]rnrn[img=https://img-bbs.csdn.net/upload/201609/08/1473295793_829225.png][/img]rnrnrn
Android UDP格式对了但是收不到返回数据
//参数rn[img=https://img-bbs.csdn.net/upload/201806/15/1529067055_524504.png][/img]rn//常量参数rn[img=https://img-bbs.csdn.net/upload/201806/15/1529067141_643558.png][/img]rn//主程序填参数启用rn[img=https://img-bbs.csdn.net/upload/201806/15/1529068170_137014.png][/img]rn//数据格式rn[img=https://img-bbs.csdn.net/upload/201806/15/1529067593_731068.png][/img]rn//数据域填写的是这个rn[img=https://img-bbs.csdn.net/upload/201806/15/1529068433_722849.png][/img]rn//UDP发送rn[img=https://img-bbs.csdn.net/upload/201806/15/1529067571_960080.png][/img]rn[img=https://img-bbs.csdn.net/upload/201806/15/1529067431_284445.png][/img]rn[img=https://img-bbs.csdn.net/upload/201806/15/1529067476_273740.png][/img]rn//Udp接受返回值rn[img=https://img-bbs.csdn.net/upload/201806/15/1529067211_362429.png][/img]rn//数据rn[img=https://img-bbs.csdn.net/upload/201806/15/1529068065_931406.png][/img]rn//问题是发送出去后没有返回,不知道是不是取系统时间转成了int就填进去导致格式不对还是什么。rn尝试过int转换成byte字节但是还是不行。或许是我转换的方法不对。或许是常量数据域的数据不对。各种尝试,目前没找到原因。rn校验码采用累加和取反的校验方式。这个已经试验过无问题。另一个功能联通过。rn
jqgrid + struts2返回数据收不到。
代码如下rn[code=JScript]rn$(function() rn $("#commonForm").validationEngine();rn $("#searchCondition").validationEngine(promptPosition: "centerRight");rn var entry=0;rn // 物品列表gridrn var itemGrid=jQuery("#items").jqGrid( rn //url : 'findItems',rn datatype : "json",rn colNames : [ 'ID', '物品名称', '物品类型', '物品等级', '说明', '显示模型', '掉落时显示模型', '要求等级', '耐力', '智力', '力量',rn '敏捷', '攻击力', '法术攻击力', '护甲', '魔防', '叠加数量', '物品最大数量', '需求技能', '需求技能等级', '可装备位置', '套装ID', '最大耐久', '是否可购买',rn '价格', '附加技能', '闪躲', '招架', '格挡', '暴击', '命中', '魔法恢复', '物品品质'],rn colModel : [ name:'entry',index:'entry',width:100,sortable:false,hidden:true, rn name:'itemName',index:'itemName',width:120,sortable:false, rn name:'itemClzz',index:'itemClzz',width:100,sortable:false, rn name:'itemLevel',index:'itemLevel',width:70,sortable:false, rn name:'description',index:'description',width:300,sortable:false,rn name:'displayed',index:'displayed',width:'100',sortable:false,hidden:true,//显示模型名称rn name:'displayed2',index:'displayed2',width:'100',sortable:false,hidden:true,//掉落时显示模型名称rn name:'requiredLevel',index:'requiredLevel',width:'70',sortable:false,hidden:false,//要求等级rn name:'stamina',index:'stamina',width:'40',sortable:false,hidden:true,//耐力rn name:'intelligence',index:'intelligence',width:'40',sortable:false,hidden:true,//智力rn name:'strength',index:'strength',width:'40',sortable:false,hidden:true,//力量rn name:'agility',index:'agility',width:'40',sortable:false,hidden:true,//敏捷rn name:'attPower',index:'attPower',width:'40',sortable:false,hidden:true,//攻击力rn name:'spellPower',index:'spellPower',width:'40',sortable:false,hidden:true,//法术攻击力rn name:'armorClass',index:'armorClass',width:'40',sortable:false,hidden:true,//护甲rn name:'defmagic',index:'defmagic',width:'40',sortable:false,hidden:true,//魔防rn name:'stackAble',index:'stackAble',width:'40',sortable:false,hidden:true,//叠加数量rn name:'maxCount',index:'maxCount',width:'80',sortable:false,hidden:true,//物品最大数量rn name:'requiredSkill',index:'requiredSkill',width:'70',sortable:false,hidden:true,//需求技能rn name:'requiredSkillRank',index:'requiredSkillRank',width:'80',sortable:false,hidden:true,//需求技能等级rn name:'inventoryType',index:'inventoryType',width:'70',sortable:false,hidden:true,//可装备位置rn name:'itemset',index:'itemset',width:'60',sortable:false,hidden:true,//套装IDrn name:'maxDurability',index:'maxDurability',width:'70',sortable:false,hidden:true,//最大耐久rn name:'canBuy',index:'canBuy',width:'70',sortable:false,hidden:true,//是否可购买rn name:'price',index:'price',width:'40',sortable:false,hidden:true,//价格rn name:'bonusSkill',index:'bonusSkill',width:'70',sortable:false,hidden:true,//附加技能rn name:'dodge',index:'dodge',width:'40',sortable:false,hidden:true,//闪躲rn name:'parry',index:'parry',width:'40',sortable:false,hidden:true,//招架rn name:'block',index:'block',width:'40',sortable:false,hidden:true,//格挡rn name:'crit',index:'crit',width:'40',sortable:false,hidden:true,//暴击rn name:'haste',index:'haste',width:'40',sortable:false,hidden:true,//命中rn name:'magicrestore',index:'magicrestore',width:'70',sortable:false,hidden:true,//魔法恢复rn name:'quality',index:'quality',width:'70',sortable:false,hidden:true//物品品质rn ],rn multiselect : true,rn rowNum : 15,rn // 一个数组用来调整表格显示的记录数,此参数值会替代rowNum参数值传给服务器端。如果为空则不显示,设置格式:[10,20,30]rn rowList : [ 10, 15, 500, 1000 ],rn pager : '#pager',rn sortname : 'entry',rn viewrecords : true,rn sortorder : "desc",rn height : 348,rn width : 800,rn caption : "物品列表",rn // jsonReader的属性rn jsonReader : rn // 这个元素指明表格所需要的数据从哪里开始rn root : "items",rn page : "page.curPage", // 当前页rn total : "page.totalPages", // 总页数rn records : "page.totalRecords", // 总记录数rn rows : "page.pageSize",// 每页显示的行数rn sort : "page.orderBy",// 排序字段rn order : "page.order",// 排序方式rn // 指明每行的数据是可以重复的,如果设为false,则会从返回的数据中按名字来搜索元素,这个名字就是colModel中的名字rn repeatitems : falsern ,rn prmNames : rn rows : "page.pageSize",rn page : "page.curPage",rn total : "page.totalPages",rn records : "page.totalRecords",rn sort : "page.orderBy",rn order : "page.order"rn rn );rn itemGrid.jqGrid('navGrid','#pager',add:false,edit:false,del:false,search:false,refresh:false);rn itemGrid.jqGrid('navButtonAdd','#pager',rn caption: "列选择",rn onClickButton : function ()rn itemGrid.jqGrid('columnChooser');rn rn );rn /**rn * ----------------------------------初始化各Select------------------rn */rn createClzz("clzz","subClzz");rn createClzz("item_clzz","item_subClzz");rn createQuality("item_quality");rn createQuality("quality");rn /**rn * ---------------------------------弹出框属性设定-------------------rn */rn //查看的弹出框设置rn $("#viewItemDiv").dialog(modal:true, width:480, height:550, minHeight:550, minWidth:480,close:function()rn $("#commonForm").resetForm();rn $("#viewItemDiv :text,:radio,#viewItemDiv textarea,#viewItemDiv select").removeAttr("disabled");rn $(".formError").remove();rn entry=0;;rn ).dialog("close");rn //导入的弹出框设置rn $("#batchAddDiv").dialog( modal:true, width:480, height:180, minHeight:180, minWidth:480, maxHeight:180, maxWidth:480 ).dialog("close");rnrn /**rn * ---------------------------按钮相关处理--------绑定各按钮事件----------------rn */rn //查询按钮rn $("#searchButton").click(function() rn var param = $("#searchCondition").formSerialize();rn var name = $("#searchCondition input:first");rn if (name.val() == "") rn param = param.replace("item.itemLevel=", "item.itemLevel=-1");rn rn itemGrid.setGridParam(rn page : 1,rn url : "findItems.action?" + encodeURI(param)rn ).trigger("reloadGrid");rn );rn //下面省略若干rn)rn[/code]rnrn[code=Java]rn@Action(results = @Result(type = "json") , value = "findItems")rn public String findItems() throws Exception rn // jqGrid查询转码-utf-8rn Tools.decodeObject(this.item);rn this.page.init(this.itemService.findTotalRows(item));rn System.out.println("shunxu: " + page.getOrderBy() + page.getOrder());rn System.out.println("mingzi" + item.getName());rn System.out.println("dengji: " + item.getItemLevel());rn System.out.println("wupinleixing" + item.getClzz());rn System.out.println("wupinzileixing" + item.getSubClzz());rn System.out.println("pinzhi" + item.getQuality());rn System.out.println("total:" + page.getTotalRecords());rn if (this.page.getTotalRecords() != 0) rn items = this.itemService.findItemsByCondition(item, this.page.getCurPage(), this.page.getPageSize(),rn this.page.getOrderBy(), this.page.getOrder());rn rn return "success";rn rn[/code]rnrn断点在action中,需要返回的数据items有值,但是jqgrid中不显示。
UDP广播,服务器回复的消息客户端收不到?
需求是这样:rn有多台机器(A、B、C、D、E...),IP地址都是192.168.1.x,现在A向192.168.1.255发送广播,B、C、D、E...接收到后打印A的IP和PORT,然后向A回复,两者之间进行通信。rnrn/**rn * client.crn * client端: Arn * 发送UDP广播,然后接收server端的回复;rn **/rn[code=C/C++]rn#include rn#include rn#include rn#include rn#include rn#include rnrn#define MAXLINE 256rnrnint main(int argc, char *argv[])rnrn if(argc < 2)rn rn printf("arg\n");rn exit(1);rn rn rn struct sockaddr_in seraddr;rn int sockfd, n;rn char buffer[MAXLINE];rn rn sockfd = socket(AF_INET, SOCK_DGRAM, 0);rn if(sockfd<0)rn rn perror("Socket Error");rn exit(1); rn rnrn int YES = 1;rn if(-1 == setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &YES, sizeof(YES)))rn rn perror("set broadcast failed\n");rn exit(1);rn rnrn rn bzero(&seraddr, sizeof(struct sockaddr_in));rn seraddr.sin_family = AF_INET;rn seraddr.sin_addr.s_addr = inet_addr(argv[1]);rn seraddr.sin_port = htons(8888);rnrn while(1) rn rn bzero(buffer, MAXLINE);rn printf("Please input char:\n"); rn fgets(buffer, MAXLINE ,stdin); rn n = sendto(sockfd, buffer, strlen(buffer), 0, (struct sockaddr *)&seraddr, sizeof(seraddr));rnrn bzero(buffer, MAXLINE);rn n = recvfrom(sockfd, buffer, MAXLINE, 0, NULL, 0);rn buffer[n-1] = '\0';rn printf("buffer=[%s]\n", buffer);rn rnrn close(sockfd);rn return 0;rnrn[/code]rnrn/**rn * server.crn * server端: B、C、D、E...rn * 接收client端发来的广播,收到广播后打印client端的IP和端口,然后给client端回发一条消息;rn **/rn[code=C/C++]rn#include rn#include rn#include rn#include rn#include rn#include rnrn#define MAXLINE 256rnrnint main(void)rnrn int sockfd;rn struct sockaddr_in seraddr, cliaddr;rn socklen_t cliaddr_len;rn char buffer[MAXLINE];rn int n;rn rn sockfd = socket(AF_INET, SOCK_DGRAM, 0);rn if(sockfd < 0)rn rn perror("sock error");rn exit(1);rn rnrn int YES = 1;rn if(-1 == setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &YES, sizeof(YES)))rn rn perror("set broadcast failed\n");rn exit(1);rn rnrn bzero(&seraddr, sizeof(struct sockaddr_in));rn seraddr.sin_family = AF_INET;rn seraddr.sin_addr.s_addr = htonl(INADDR_ANY);rn seraddr.sin_port = htons(8888);rn rn if(-1 ==bind(sockfd, (struct sockaddr *)&seraddr, sizeof(struct sockaddr_in)))rn rn perror("bind error");rn exit(1);rn rnrn cliaddr_len = sizeof(cliaddr);rn rn while(1)rn rn bzero(buffer, MAXLINE);rn n = recvfrom(sockfd, buffer, MAXLINE, 0, (struct sockaddr *)&cliaddr, &cliaddr_len);rn buffer[n-1] = '\0';rn printf("received from %s at PORT %d\n", inet_ntoa(cliaddr.sin_addr), ntohs(cliaddr.sin_port));rn printf("buffer=[%s]\n", buffer);rn rn bzero(buffer, MAXLINE);rn printf("Please input char:\n"); rn fgets(buffer, MAXLINE ,stdin);rn n = sendto(sockfd, buffer, strlen(buffer), 0, (struct sockaddr *)&cliaddr, sizeof(cliaddr));rn rnrn close(sockfd);rn return 0;rnrn[/code]rnrn现在的情况是client端发送UDP广播后,server端能收到,也能打印出client端的IP和PORT,但是回发消息client端却收不到,用iptool抓包,确实看到server端回复UDP包,但client端却阻塞在recvfrom那里没有收到;rn还有一个情况,就是client不发广播,而是直接填充server的IP地址,两者通信完全正常。rnrniptool截图:rn[img=http://b93.photo.store.qq.com/psb?/V10aNaNU2uI8hQ/XR7qxk50Uafow5HbGY0YV8GhUihAg4uZc6G0Bye.owY!/b/YcRbdjeTZgAAYtwCgTdHZQAA][/img]rnrnrn现在怀疑,是不是UDP广播不支持直接回复?还是因为其他的原因?rn望高人指点。谢谢rn
请教UDP收不到数据包的问题?
用socket写了个收发数据的程序,UDP协议,服务器端程序放到服务器后,在自己的电脑里发送并接收数据,客户端发送的信息在服务器那边可以收到,就是服务器端的数据在客户端收不到,用winshark来抓不到包,现在一头雾水,完全不知道是什么原因,在两台PC连接测试的时候程序可以完成工作,放到服务器就不行了。但是我的同事的电脑可以收到服务器的包,太奇怪了。rnrn请各位高手赐教一下,谢谢rnrn[b]下面是接收的代码[/b]rn[code=C/C++]rnWORD wVersionRequested;rn WSADATA wsaData;rn int err;rnrn wVersionRequested = MAKEWORD(1, 1);rn DWORD dwID=GetCurrentThreadId();rn err = WSAStartup(wVersionRequested, &wsaData);rn if (err != 0) rn printf("WSAStartup failed with error: %d\n", err);rn return 0;rn rnrn if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1) rn printf("Could not find a usable version of Winsock.dll\n");rn WSACleanup();rn return 0;rn rn elsern printf("The Winsock 1.1 dll was found okay, and thread is %x\n", dwID);rn rn SOCKET sockSrv = socket(AF_INET, SOCK_DGRAM, 0);rn SOCKADDR_IN addrSrv;rn addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);rn addrSrv.sin_family = AF_INET;rn addrSrv.sin_port = htons(6120);rnrn bind(sockSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));rnrn SOCKADDR_IN addrClient;rn int len = sizeof(SOCKADDR);rnrn char recvBuf[PACKAGE_LEN];rn //char tempBuf[recvLen];rnrn while(!CLOSE_PROC)rn if(recvfrom(sockSrv, recvBuf, PACKAGE_LEN, 0, (SOCKADDR*)&addrClient, &len) != SOCKET_ERROR)rn modify_reqeust((SOCKADDR*)&addrClient, recvBuf, &sockSrv);rn SetEvent(recvEvent);rn rnrn Sleep(0);rn rn closesocket(sockSrv);rn WSACleanup();[/code]
python udp to udp 的数据转发问题
最近学习了python,准备写一个聊天程序,一台电脑做服务器,A电脑通过服务器电脑把消息发送给电脑B,B电脑也可以通过服务器电脑把消息发送给电A,电脑之间都用UDP链接。下面是我的写的代码,测试发现服务器根本收不到客户端发来的消息,请高手指点。。。rn[code=python]rn#服务端rnfrom socket import *rnfrom time import strftimernimport threadingrnimport sysrnrndef server(sock, access, addr, size=16):rn while True:rn print('go go go!!!')rn data, addr = sock.recvfrom(BUFSIZ)rn time = strftime('%H:%M:%S')rn data = repr(addr[1]) + ' ' + time+'\n '+data.decode('ascii')rn print(data)rn sock.sendto(data, access) rnrnHOST = sys.argv.pop() if len(sys.argv) == 2 else '127.0.0.1'rnPORT = 12512rnBUFSIZ = 16rnADDR = (HOST, PORT)rnthreads = []rnusrs = []rnrnSerSock = socket(AF_INET, SOCK_DGRAM)rnSerSock.bind(ADDR)rnSerSock.settimeout(1)rnwhile True:rn try:rn print('waiting connect...')rn access, addr = SerSock.recvfrom(BUFSIZ)rn print(("received from %s 's request") % repr(addr))rn sock.socket(AF_INET, SOCK_DGRAM)rn sock.bind ((HOST,addr[1]))rn sock.settimeout(1)rn usrs.append((sock, access, addr))rn print(('successfully bound with %s') % repr(addr))rn t=threading.Thread(target = server,args = (sock, access, addr))rn threads.append(t)rn t.start()rn print(repr(addr) + 'have start server') rn except timeout as e:rn print('None') rn[/code]rn[code=python]rn#客户端rnfrom socket import *rnimport threadingrnimport sysrnrnvisit = sys.argv.pop() if len(sys.argv) == 2 else '192.168.1.102' rnPORT = 12512rnBUFSIZ = 1024rnADDR = (visit, PORT)rnSerAddr = ('192.168.1.103', PORT)rnrnCliSock = socket(AF_INET, SOCK_DGRAM)rnCliSock.settimeout(2)rndef recv():rn print('start recvive data')rn while True:rn try:rn #print('come on')rn data, aaa=CliSock.recvfrom(BUFSIZ)rn print(data.decode('ascii'))rn except timeout as e:rn #print('no receive data')rn passrnrnCliSock.sendto(visit.encode('ascii'), SerAddr)rnrnre = threading.Thread(target = recv, args=())rnre.start()rnrnwhile True:rn data = input('>')rn print(data)rn if not data:rn print('get data') rn CliSock.sendto(data.encode('ascii'),ADDR)rn print('data have sended')rnrn rn[/code]
Python UDP 服务器
Python3 开发详解,课程从基础的环境搭建讲起,详细讲述了Python开发的方方面面,内容包括:编程基础、函数、数据结构、异常处理、字符串、数字、网络编程、多线程、数据库处理等。
udp为什么收不到对方发的数据?
SOCKADDR_IN s_in;rnrnif ( (hUdpServerSocket = socket(AF_INET, SOCK_DGRAM, 0))== INVALID_SOCKET )rnrn nSocketError = WSAGetLastError();rn return FALSE ;rnrns_in.sin_addr.S_un.S_addr = inet_addr("192.168.42.99");//INADDR_ANY;rns_in.sin_family = AF_INET ;rns_in.sin_port = htons(port) ;rnif ( bind(hUdpServerSocket, (SOCKADDR*)&s_in, sizeof(SOCKADDR_IN))== SOCKET_ERROR )rnrn closesocket(hUdpServerSocket);rn return FALSE ;rnrnwhile ( 1 )rnrn int nReadSocket = 0 ;rn fd_set sockSet;rn struct timeval interval;rnrn FD_ZERO(&sockSet);rn FD_SET(hUdpSocket, &sockSet);rn interval.tv_sec = iTimeOut;rn interval.tv_usec = (iTimeOut > 0) ? 0 : 10;rn nReadSocket = select(0, &sockSet, NULL, NULL, &interval);rn if ( nReadSocket == 1 )rn recvfrom(...) ;rnrn现在是对方发了很多数据, 这里的nReadSocket总是为0,郁闷ing....
udp编程recvfrom函数第二次收不到数据
小弟使用c++实现udp通信,但是第二次使用recvfrom函数总是收不到数据,在服务器端,第二次使用rnrecvfrom(s,buffer2,sizeof(buffer2) ,0,(LPSOCKADDR)&from2,&fromlen2);rn时总是接收不到数据。rn请大侠帮忙。rn服务器端:rn[code=c]rnbool UdpStart::ShakeHands()rnrn CCSDef::TMSG_HEADER *pMesgHeader=NULL;rn CCSDef::TMSG_SHAKINGHANDS ShakingMessage; //mine shakinmessage ,firstnumer is client random, secondnumber is server randomrn int firstnumber=random();rn cout<<"random"<FirstNumber;rn ShakingMessage.Result=ACK;rn int ret=0;rn ret=sendto(s,(char *)(&ShakingMessage),sizeof(CCSDef::TMSG_SHAKINGHANDS),0,(LPSOCKADDR)&from,sizeof(from));rn if(ret>0)rn rn cout<<"date has been send"<SecondNumber==ShakingMessage.SecondNumber)&&(ShakingMessage3->Result==ACK))rn rn cout<<"three way hand shake complite"<0)rn rn cout<<"DATA HAS BEEN SENT..."<FirstNumber==firstnumber && ret>0 && ShakingMessage2->Result==ACK)rn rn ShakingMessage2->Result=ACK;rn rn cout<FirstNumber<SecondNumber<
dm365 用udp传输视频,接收端收不到数据
我现在想用dm365经过h.264编码后的视频以UDP方式发出去,在接收端使用VLC进行实时播放。我把socket程序加在了dm365的encodedecode demo中,此demo中视频编码后的数据在hEncBuf中。现在用vlc播放没有画面,用wireshark抓包发现没有数据,请高手赐教,我socket部分的代码为rn int sockfd; rn struct sockaddr_in sin; rn sockfd=socket(AF_INET,SOCK_DGRAM,0); rn bzero(&sin,sizeof(sin)); rn if(sockfd==-1)rn perror("socket");rn exit(1); rn sin.sin_family=AF_INET;rn sin.sin_port=htons(1234);rn sin.sin_addr.s_addr=inet_addr("192.168.1.111");rn while(1)rn sendto(sockfd, out_buf, frame_size, 0, (struct sockaddr *)&sin, sizeof(sin)); rn close (sockfd);rn exit(0);
udp为什么收不到广播中的数据
[code=C/C++]rnchar t_chMessage[DSC_DATASIZE] = 0;rnSOCKET t_Socket;rnSOCKADDR_IN t_SocketAddrIn;rnSOCKADDR_IN t_SocketRemoteAddrIn;rnint t_nRemoteAddrLen = 0;rnint t_nRet = 0;rnt_nRemoteAddrLen = sizeof(SOCKADDR_IN);rn//设置为SO_BROADCASTrnBOOL t_bBroadcast = TRUE;rn//非阻塞模式设定rnint t_nMode = 1;rnrnt_SocketAddrIn.sin_family = AF_INET;rnt_SocketAddrIn.sin_port = htons(1092);rnt_SocketAddrIn.sin_addr.s_addr = htonl(INADDR_ANY);rnrnt_SocketRemoteAddrIn.sin_family = AF_INET;rnt_SocketRemoteAddrIn.sin_port = htons(1092);rnt_SocketRemoteAddrIn.sin_addr.s_addr = htonl(INADDR_BROADCAST);rn rn t_Socket = socket(AF_INET, SOCK_DGRAM, 0);rn if(t_Socket == SOCKET_ERROR)rn rn return 0;rn rnrn t_nRet = setsockopt(t_Socket,SOL_SOCKET,SO_BROADCAST,(char*)&t_bBroadcast,sizeof(BOOL));rn if (t_nRet != 0)rn rn t_nRet = WSAGetLastError();rn closesocket(t_Socket);rn return 0;rn rnrn t_nRet = ioctlsocket(t_Socket, FIONBIO, (u_long FAR*)&t_nMode);rn if(t_nRet != 0)rn rn t_nRet = WSAGetLastError();rn closesocket(t_Socket);rn return 0;rn rnrn t_nRet = bind(t_Socket, (struct sockaddr*)&t_SocketAddrIn, sizeof(SOCKADDR_IN));rn if(t_nRet == SOCKET_ERROR)rn rn t_nRet = WSAGetLastError();rn closesocket(t_Socket);rn return 0;rn rnrn fd_set fdRead;rn struct timeval tv = 5,0;rn while(true)rn rn FD_ZERO(&fdRead);rn FD_SET(t_Socket, &fdRead);rn t_nRet = select(0, &fdRead, NULL, NULL, &tv);rn if(t_nRet == 0)rn rn continue;rn rn else if(t_nRet < 0)rn rn return 0;rn rnrn if(FD_ISSET(t_Socket, &fdRead))rn rn t_nRet = recvfrom(t_Socket, t_chMessage, DSC_DATASIZE, 0, (struct sockaddr *)&t_SocketRemoteAddrIn, &t_nRemoteAddrLen);rn if(t_nRet == SOCKET_ERROR )rn rn t_nRet = WSAGetLastError();rn closesocket(t_Socket);rn return 0;rn rn elsern rn t_chMessage[t_nRet] = '\0';rnrn break;rn rn rn rnrn closesocket(t_Socket);rnrn谁能帮我看看这段代码有什么问题没?我这段代码怎么也收不到255.255.255.255广播的数据。rn下面是我发送到广播中的代码。rnrn int t_nRet = 0;rn SOCKET t_Socket = NULL;rn SOCKADDR_IN t_SocketAddrin;rn BOOL t_bBroadcast = TRUE;rn rn t_SocketAddrin.sin_family = AF_INET;rn t_SocketAddrin.sin_port = htons(1092);rn t_SocketAddrin.sin_addr.s_addr = inet_addr("255.255.255.255");rnrn char t_chMessage[113] =这里面是数据;rn t_Socket = socket(AF_INET, SOCK_DGRAM, 0);rn if(t_Socket == SOCKET_ERROR)rn rn return;rn rnrn //发送广播包rn t_nRet = setsockopt(t_Socket,SOL_SOCKET,SO_BROADCAST,(const char*)&t_bBroadcast,sizeof(BOOL));rn if(t_nRet != 0)rn rn closesocket(t_Socket);rn return;rn rnrn sendto(t_Socket, t_chMessage, 113, 0, (struct sockaddr*)&t_SocketAddrin, sizeof(t_SocketAddrin));rnrn closesocket(t_Socket);rn[/code]
线程中UDP收不到数据重新初始化
如题,程序启动时用一个线程去启动udp监听,里面就是一个while(true)的死循环,但是发现程序运行几天后会出现读不到udp报文的现象,现在想判断一定时间收不到报文则重新初始化这个udp对象rn本来的想法是结束线程,重启创建线程则完成初始化,但实际上是结束线程确实会出现异常抛出,虽然使用下面的语句可以结束线程并启动新线程,总感觉中间停顿,大家有什么好的方法,在程序中重新初始化这个udp对象,并完成继续读取udp数据rn[code=C#] if (udp_thread.IsAlive)rn rn udp_thread.Abort();rn udpClient.Close();//释放对象全局的rn rn rn Thread.Sleep(5000);rn tryrn rn udp_thread = new Thread(OnUdpRead);//OnUdpRead为udp读取函数rn udp_thread.IsBackground = true;rn udp_thread.Start();rn rn catch (Exception ex)rn rn rn [/code]rn程序中还开启一个线程,读取串口数据,出现同样问题,运行一段时间会读不到串口数据,同问怎么关闭串口的线程,并重新初始化串口。rn我现在是一定时间读不到串口数据,则关闭串口,再new一个新对象,并设置其属性,这个还没办法测试,明天才知道行不行,我并没有关闭原来串口的线程。rn[code=C#] sp.Close();rn tryrn rn sp = new SerialPort(m_portname, m_baudrate, Parity.Odd, 8, StopBits.One);rn rn catch (Exception spe)rn rn MessageBox.Show(spe.ToString(), "串口异常");rn return;rn rn sp.ReadBufferSize = 1024;rn sp.WriteBufferSize = 1024;rn sp.ReadTimeout = 1000;rn sp.WriteTimeout = 1500;rn sp.DtrEnable = true;rn sp.RtsEnable = false;rn sp.DiscardNull = false;[/code]rnrn路过的指导个解决方案!
udp socket 收不到miniport驱动传递的数据
我最近在学习使用OpenVpn的tap-win32实现数据的转发,rnrn接收数据的流程:rn1. 构造一个以太网数据包(目的地址是虚拟网卡的MAC和IP地址,源地址分别为MAC_A,IP_A,源端口号和目的端口号都为6000);rn2. 通过WriteFile向虚拟网卡写入该数据,然后调用udp socket的recvfrom接收数据。rn socket的bind函数,绑定的地址为IP_A,端口号为6000。rnrn发送数据的流程:rn1. 构造一个以太网数据包(源地址和目的地址都是任意的)。rn2. 通过udp socket的sendto发送至虚拟网卡,在虚拟网卡的发送函数中保存发送的数据,然后就调用ReadFile读取该数据。rnrn问题是:rn在发送流程中,我通过sendto发送的数据,调用ReadFile可以读到。但是在接收流程中,通过WriteFile写入虚拟网卡的数据,使用recvfrom却读不到?rn请教问题可能出在哪里?rnrn花了一天时间了,也没有找到原因......
udp 发送一个广播后接收不到数据
程序首先发送一个字符串到广播地址 255.255.255.255rnrn然后开始接收返回的数据rnrnUdpClient myUdpClient = new UdpClient();rn tryrn rn IPEndPoint iep = new IPEndPoint(IPAddress.Broadcast, 10000);rn myUdpClient.EnableBroadcast = true;rn myUdpClient.Send(senddata, senddata.Length, iep);rnrn IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);rn Byte[] receiveBytes =myUdpClient.Receive(ref RemoteIpEndPoint);rn string returnData = Encoding.ASCII.GetString(receiveBytes);rn rn catch (Exception ex)rn rn MessageBox.Show(ex.Message, "发送失败");rn rnrn现在receiveBytes 返回是nullrnrn请指点一下 原来么用过udp
UDP 接收一段时间以后 就收不到数据了??
我用的是UDP 的阻塞模式,开了一个线程进行UDP数据的接收。rn每次我都会接到客户端收过来的36字节的数据包,大概间隔1到5分钟收一次。rn原本以为是小程序,就用了阻塞模式:rnrnchar szRec[36];//接收数组rnwhile(1)rnrnReceivefrom(szRec,36,目标ip,目标端口);rn rn下面是数据处理函数。。。rnrnrnrn我的这个一般能接受20分钟到1个半小时,然后就停在Receivefrom这条语句了,因为我在该语句前后都加上了TRACE发现的。rn我想请问一下,为什么会出现这汇总情况啊?rnrn rn
UDP实现Traceroute为什么收不到ICMP数据?
[实现Traceroute思路]rn1. 用 UDP 发送数据,TTL从1开始,每次发送增加1,这样在中间路由器超时,会向源主机发送 ICMP 超时消息;rn2. 用协议类型为IPPROTO_ICMP的原始socket接收返回的ICMP数据,但在 Windows Vista创建的ICMP原始sokcet却收不到数据,总是超时。rn是否有人遇到过同样的问题?欢迎交流!rnrn代码来自《WinSock网络编程经络》Trace程序,下载地址:http://download.csdn.net/detail/geoff08zhang/4571358
UDP数据接收服务器
这是我在做一个要用UDP方式进行数据传输时,自己写的一个多线程的UDP数据接收服务器, 它能将接收到的UDP数据包存成文件,并提供数据包接收时间监测; 还支持键盘命令响应,以将数据写到新的文件,和退出程序;
UDP协议收不到内容?
发:rnDim bytes(1) As Byternbytes(0) = &HArnbytes(1) = &H9rnrnWinsock1.SendData (bytes)rnrn收:rnDim bytes(1) As ByternWinsock1.GetData bytes, vbArray + vbByternDebug.Print Chr(bytes(1)) + Chr(bytes(0))rnrn为什么打印出来,为0?协议为UDP协议。
WIN7收不到UDP广播
我的一个应用程序要监听局域网的UDP广播,原来在XP系统中运行正常,转换到WIN7后,UDPCLIENT的HOST设为广播地址时,UDPSERVER没有反应。要怎样设置WIN7才能使之可以接收UDP广播?
UDP传送图片收不到
用UDP传桌面抓图,但接收端(Server)无反应,无出错提示,麻烦大家帮忙看看。补充说明一下,UDP是广播的255.255.255.255rnrn发送端(Client):rn===================rnprocedure TForm1.Button1Click(Sender: TObject);rnvarrn PicStream:TMemoryStream;rn bitmap:TBitMap;rn jpeg:TJpegImage;rn desk:TCanvas;rnbeginrn PicStream:=TMemoryStream.Create;rn bitmap := TBitMap.Create;rn jpeg := TJpegImage.Create;rn desk := TCanvas.Create;rn desk.Handle:=getdc(hwnd_desktop);rn bitmap.Width:=Screen.Width;rn bitmap.Height:=Screen.height;rn bitmap.Canvas.Lock;rn bitmap.canvas.CopyRect(bitmap.canvas.cliprect,desk,desk.cliprect);rnrn jpeg.Assign(bitmap);rn jpeg.CompressionQuality := 1;rn jpeg.JPEGNeeded;rn jpeg.Compress;rnrn jpeg.SaveToStream(PicStream);rn Image1.Picture.Bitmap.Assign(bitmap); rn bitmap.Canvas.UnLock;rn bitmap.Free;rn jpeg.Free;rn desk.Free;rnrn PicStream.Position:=0;rn IdUDPClient1.SendBuffer(PicStream.Memory^,PicStream.Size);rnend;rnrnrn接收端(Server):rn===================rnprocedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;rn ABinding: TIdSocketHandle);rnvarrn picM:TMemoryStream;rn jpeg:TJpegImage;rnbeginrn jpeg := TJpegImage.Create;rn picM := TMemoryStream.Create;rn picM.CopyFrom(AData,AData.Size);rn picM.Position:=0;rn jpeg.LoadFromStream(picM);rn Image1.Picture.Bitmap.Assign(jpeg);rn jpeg.Free;rnend;
UDP广播收不到
下面是我的广播测试例子rn运行服务器:java broadcastdemo.BroadcastDemo server 230.0.0.1 9999rn运行客户端:java broadcastdemo.BroadcastDemo client 230.0.0.1 9999rn但是无论如何,客户端收不到任何消息!rn如果打开某个网络抓包工具进行监控,那么可以看到服务器发出的包,并且十分奇怪的是,此时客户端也能正常接收所有消息。rnrn何故?rnrnpackage broadcastdemo;rnimport java.net.*;rnimport java.util.*;rnpublic class BroadcastDemornrn public static void main(String[] args)rn rn if(args[0].equals("server"))rn rn (new Server(args[1], Integer.parseInt(args[2]))).start();rn rn else if(args[0].equals("client"))rn rn (new Client(args[1], Integer.parseInt(args[2]))).start();rn rn rnrnclass Client extends Threadrnrn int port; //组播的端口.rn InetAddress group=null; //组播组的地址.rn MulticastSocket socket=null; //多点广播套接字.rn public Client(String groupAddr,int port)rn rn this.port=port;rn tryrn rn group=InetAddress.getByName(groupAddr);rn socket=new MulticastSocket(port);rn socket.joinGroup(group);rn rn catch(Exception e)rn rn e.printStackTrace();rn rn rn public void run()rn rn DatagramPacket packet=null;rn while(true)rn rn byte data[]=new byte[256];rn packet=new DatagramPacket(data,data.length); //待接收的数据包。rn tryrn rn socket.receive(packet);rn String message=new String(packet.getData(),0,packet.getLength());rn System.out.println(message);rn rn catch(Exception e)rn rn e.printStackTrace();rn rn rn rnrnrnclass Server extends Threadrnrn InetAddress group=null; //组播组的地址.rn MulticastSocket socket=null; //多点广播套接字.rn int port;rn Server(String groupAddr,int port)rn rn tryrn rn group=InetAddress.getByName(groupAddr); rn this.port=port;rn socket=new MulticastSocket(port); rn //socket.setTimeToLive(1); rn socket.joinGroup(group); rn //可以被加入到group中的成员接收到。rn rn catch(Exception e)rn rn e.printStackTrace();rn rn rn public void run()rn rn while(true)rn rn tryrn rn DatagramPacket packet=null; //待广播的数据包。rn byte data[]=(new Date()).toString().getBytes();rn packet=new DatagramPacket(data,data.length,group,port);rn socket.send(packet); //广播数据包。rn System.out.println(new String(data));rn sleep(5000);rn rn catch(Exception e)rn rn e.printStackTrace();rn rn rn rn rn
udp收不到,为什么
您好,大家们rnrn我从远程电脑发udp数据,但我收不到,为什么? 我给远程 机子我的ip地址了。。。。 本地运行没有问题。。。就从远程电脑收不到udp数据。。。。怎么解决?
为什么收不到别人的udp?
我使用双线程,一个用于发送本机用户名和地址,为什么收不到别人的信息,而且本机广播消息本机也受到,,所以用了两个recvfrom,怎么刷新找不到别人呢??rn高人把邮箱留下:我的lizhong2613@126.com帮小弟改改rn第二个线程代码如下:DWORD WINAPI CChatDlg::ThreadProc(LPVOID lpParameter)rnrn rn struct userinfo senduser; rn //struct userinfo recvuser;rn rnrn rn senduser.flag=Public::localuser.flag;rn senduser.name=Public::localuser.name; rn senduser.ipadd=Public::localuser.ipadd;rnrn while ((*senduser.name)=="") rn Sleep(1000);rn rnrn SOCKET s;rn SOCKET s2;rn sockaddr_in addrto;rn sockaddr_in from,a;rnrn BOOL optval;rn BOOL bsocket;rnrn CString sendflag;rn if (senduser.flag==1) rn sendflag="1";rn rn elsern sendflag="0";rn CString sendtemp=(*senduser.name)+"&"+(*senduser.ipadd)+"&"+sendflag;rn char sendbuf[100];rn strcpy(sendbuf,(char*)(LPCTSTR)sendtemp);rn char buf[100];rn rn //memcpy(sendtemp,&senduser,100);rn //AfxMessageBox(sendtemp);rn optval=TRUE;rnrn s=socket(AF_INET,SOCK_DGRAM,0);rn s2=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,WSA_FLAG_OVERLAPPED);rn bsocket=TRUE;rnrn bool opt=true;rn //设置该套接字为广播类型,rn setsockopt(s2,SOL_SOCKET,SO_BROADCAST,(char FAR *)&opt,sizeof(opt));rn int nlen=sizeof(addrto);rn //然后赋值给两个地址,一个用来绑定套接字,一个用来从网络上的广播地址接收消息;rn a.sin_family=AF_INET;rn a.sin_addr.s_addr=0;rn a.sin_port=htons(5050);rn rn rn int fromlength=sizeof(SOCKADDR);rn //用UDP初始化套接字rnrn //设置该套接字为广播类型,rn setsockopt(s,SOL_SOCKET,SO_BROADCAST,(char FAR *)&optval,sizeof(optval));rn bind(s,(sockaddr *)&a,sizeof(sockaddr_in));rn rn while(1)rn //从广播地址接收消息,注意用来绑定的地址和接收消息的地址是不一样的rnrn rn addrto.sin_family=AF_INET;rn addrto.sin_addr.s_addr=INADDR_BROADCAST;rn addrto.sin_port=htons(5050);rnrn int ret=sendto(s2,sendbuf,256,0,(sockaddr*)&addrto,nlen);rn /* if(ret==SOCKET_ERROR)rn AfxMessageBox( "send is fail");rn elsern rn AfxMessageBox( "send is ok"); rn rn */ rn rn recvfrom(s,buf,100,0,(struct sockaddr FAR *)&from,(int FAR *)&fromlength);rnrn // memcpy((char *)&recvuser,buf,100);rn //AfxMessageBox((*recvuser.ipadd));rn //AfxMessageBox(buf);rn Public::recvuser(buf);rn //AfxMessageBox((*Public::useronline[0].ipadd));rn //Sleep(2000);rn //AfxMessageBox((*Public::useronline[1].ipadd));rn recvfrom(s,buf,100,0,(struct sockaddr FAR *)&from,(int FAR *)&fromlength);rn Public::recvuser(buf);rn ZeroMemory(buf,100);rn //Sleep(1000);rn //从广播地址发送消息rn rn rn rn rn rn return 0;rnrn
手机客户端接收不到服务器的返回信息
各位高手,我有一段用SocketConnection连接服务器,发送和接受消息的代码:rn public static byte[] send( byte[] reqBytes, SocketConnection connection, DataInputStream dis,rn DataOutputStream dos )rn rn byte[] resBytes = null;rn rn tryrn rn connection = ( SocketConnection ) Connector.open "socket://61.183.207.108:9999" );rn// dis = new DataInputStream( connection.openInputStream() );rn// dos = new DataOutputStream( connection.openOutputStream() );rn rn dis = connection.openDataInputStream();rn dos = connection.openDataOutputStream();rn if ( dos != null )rn rn tryrn rn rn dos.write( reqBytes, 0, reqBytes.length );rn dos.flush(); // 发送rn dos.close();rn rn rn catch ( IOException e )rn rn e.printStackTrace();rn rn rnrn if ( dis != null )rn rn tryrnrn int bufferSize = 256;// 缓冲区的容量(2K)rn byte[] bt = new byte[bufferSize];rn int count = dis.read( bt, 0, bt.length );rn resBytes = new byte[ bt.length ];rn System.arraycopy( bt, 0, resBytes, 0, bt.length );rn rn rn catch (Exception e) rn rn ex1 = e.toString();rn e.printStackTrace();rn rn rn rn rn catch ( Exception e )rn rn ex1 = e.getMessage();rn e.printStackTrace();rn rn rn return resBytes;rn rn rn 在这段代码中,我向server发消息,server可以收到;但是server向客户端发送消息时,客户端收不到。服务器控制台显示socket超时,不断地retry,最后断开连接。我调试后显示 int count = dis.read( bt, 0, bt.length );这句话没有执行完,好像是阻塞。rn 我把这段代码单独运行的时候正常,能够发送和接受,但是我放在项目里面被其他函数调用时就接受不到server的返回信息。我想请高手们帮忙看看是哪里有问题。rn1. 这段代码我没有放在线程里运行,不知道这样会不会有太大影响?rn2. 程序里面数据的类型都是byte[]的形式,这段代码在结构上有没有问题?rn3. 还是其他原因造成的。非常感谢
UDP 收包发包问题。。。。 为什么 客户端收不到服务器发过来的包
rn //客户端rnstatic void Main(string[] args)rn rnrnrn UdpClient dp = new UdpClient(5002);rn Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);rn int udpport = 5002;rn IPAddress id = IPAddress.Parse("124.207.4.27");rn string ss = "this is hahah";rn byte[] sendbuf = Encoding.ASCII.GetBytes(ss);rn IPEndPoint ep = new IPEndPoint(id, udpport);rnrn // EndPoint remote = (EndPoint)ep;rn s.SendTo(sendbuf, ep);rn Console.WriteLine("this is hahah");rnrn UdpClient dp = new UdpClient(5003);rn IPEndPoint ip = new IPEndPoint(IPAddress.Any, 5003);rn int i = 0;rn byte[] bytes = dp.Receive(ref ep);rn i++;rn string haha = Encoding.ASCII.GetString(bytes, 0, bytes.Length);rn Console.WriteLine("接收的消息是" + haha.ToString());rn Console.ReadLine();rn rnrn
Python之web服务器-返回固定数据(二)
Python之web服务器-返回固定数据(二) import socket if __name__ == '__main__': # 1.床架TCP服务端套接字 tcp_server_socket = socket.socket(socket.SOL_SOCKET, socket.SO_REUSEADDR, True) # 2.绑定端口号 tcp_serve...
串口收不到数据的问题
我写了一个串口,正常打开发送和接受数据都没有问题,但是如果有的时候rnrn比如说,我用串口助手打开了com3,再在我软件里打开com3,这时会提示串口被占用,这也没问题rnrn现在的问题是rnrn我关闭串口助手的com3,再在软件里面打开com3,这时可以发送数据,但是收不到数据了rnrn求大侠指教。。。
ionic $http.post收不到后台返回的数据
我通过ionic的$http.post方法提交认证数据后,java后台返回的认证结果收不到,都是走的error回调函数,接收的data也为nullrn同样的请求用jquery的ajax发送post就能够接收到认证结果rn通过抓包看收到的返回结果是一样的,那为什么ionic的$http.post就是收到不到返回消息?rn是ionic里需要什么配置吗???rn在线等待,急!!!!
关于UDP的recvfrom收不到数据的问题,请高手帮忙
先把我遇到的问题部分的代码贴出来:rnbool CTestSession::getNATAddress(CAddressInfo aoNATServer)rnrn int iReady;rn struct sockaddr_in loServAddress;rn fd_set SockFd;rn std::string lstrNATMsg("SHOWMENATE");rn struct timeval loWaitTime = 10, 500000;rn int liBytes = 0;rn char lcszMsgBuf[256] = 0;rn CAddressInfo loRTPNATAddress;rnrn if (!mbIsCreated)rn return false;rnrn bzero(&loServAddress, sizeof(loServAddress));rn loServAddress.sin_family = AF_INET;rn loServAddress.sin_addr.s_addr = inet_addr(aoNATServer.getIP().c_str());rn loServAddress.sin_port = htons(aoNATServer.getPort());rnrn int i = 0;rn lstrNATMsg += "\n";rn while (!mbIsGotRTPNAT)rn rn if (++i >= 100)rn return false;rnrn std::string lstrMsgType;rn std::string lstrCmdBuf;rnrn sendto(miRTPSocket, (const char *)lstrNATMsg.c_str(), lstrNATMsg.length(),rn 0, (const sockaddr *)&loServAddress, sizeof(loServAddress));rn write_log(XFS_LOG_INFO, "send command", "send to server : %s.", lstrNATMsg.c_str());rnrn memset(lcszMsgBuf, 0, 256);rn FD_ZERO(&SockFd);rn FD_SET(miRTPSocket, &SockFd);rn [color=#FF0000]iReady = select(miRTPSocket + 1, &SockFd, NULL, NULL, &loWaitTime);[/color]rn if(iReady < 0)rn rn if((errno == EAGAIN) || (errno == EINTR))rn rn continue;rn rn write_log(XFS_LOG_ERROR, "select", "select error : %s", strerror(errno));rn rn else if (iReady == 0)rn rn continue;rn rnrn if (!FD_ISSET(miRTPSocket, &SockFd))rn rn write_log(XFS_LOG_INFO, "select", "is not my sockfd.");rn continue;rn rnrn [color=#FF0000]liBytes = recvfrom(miRTPSocket, lcszMsgBuf, 256, 0, NULL, NULL);[/color]rn if (liBytes == -1)rn write_log(XFS_LOG_INFO, "RTPSocket", "recvfrom error : %s.", strerror(errno));rn if (liBytes > 0)rn rn lstrCmdBuf.clear();rn lstrMsgType.clear();rn lstrCmdBuf += lcszMsgBuf;rn std::stringstream lstrRTPStream(lstrCmdBuf);rn lstrRTPStream >> lstrMsgType;rn if (lstrMsgType == "SHOWMENATR")rn rn loRTPNATAddress.decode(lstrRTPStream);rn moNATLock.lock();rn muiRTPPort = loRTPNATAddress.getPort();rn moNATLock.unlock();rnrn lstrRTPStream << loRTPNATAddress.getIP()rn << "--"rn << loRTPNATAddress.getPort();rn write_log(XFS_LOG_INFO, "RTPSocket", "receive from sockfd %d : %s",rn miRTPSocket, lstrRTPStream.str().c_str());rnrn mbIsGotRTPNAT = true;rn rn rn usleep(200000);rn rn return true;rnrnrn 出问题的地方我用红色标示出来了,udp发送给服务器程序的消息成功,在服务器端有日志表明,而且服务器也确实给客户端程序回复了相应的消息,可是客户端有时候能收到消息,有时候收不到。如果不用select的话,recvfrom会提示Resource temporarily unavailablern。需要说明的是,这部分代码是客户端里的,服务器和客户端程序都运行在同一个机器上。而且服务器程序是肯定没问题的,因为用windows版本的客户端程序测试就不会出现问题。rn 这个问题都困扰兄弟我好长时间了,也搞不明白怎么回事?到底原因在哪里?select怎么就会检测不到文件描述符收到消息呢,服务器明明是回复了,windows版本的程序就一点问题都没有,Linux下的客户端程序我也是按照windows版本的移植过来的。rn 请高手能帮忙看一下问题可能出现在哪里?谢谢!
Python 绝技 —— UDP 服务器与客户端
i春秋作家:wasrehpic0x00 前言在上一篇文章「Python 绝技 —— TCP 服务器与客户端」中,介绍了传输层的核心协议 TCP ,并运用 Python 脚本的 socket 模块演示了 TCP 服务器与客户端的通信过程。本篇将按照同样的套路,先介绍传输层的另一个核心协议 UDP,再比较 TCP 与 UDP 的特点,最后借助 Python 脚本演示 UDP 服务器与客户端的通信过程。...
基于python的UDP服务器代码
使用python代码编写的服务器系统,采用的是UDP协议和socket技术,调试可用。
python学习:编写TCP服务器&UDP服务器
python学习:编写TCP服务器&UDP服务器本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境:主机:WIN10python版本:3.4开发环境:pyCharm 5.0.2说明:项目需求,编写了TCP服务器和UDP服务器负责接收和转发数据。源代码:# 导入socket库: import socket import threading # imp
udp服务器和TCP服务器的问题
想请教下高人,我现在有一个UDP服务器和客户端,还有一个TCP服务器和客服端,UPD程序的功能是服务器发送器请求,客户端回复本地IP和机器名,TCP程序是多线程并发文件,我想在想把他们合到一个程序里有没可能,就是在服务器程序里,先建立UPD广播,再TCP多线程并发,UPD和TCP的程序,各自编译运行都没问题
相关热词 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法