c# udp sendto目标未开 receivefrom接收不到数据 50C

使用UDP转发数据,转发程序接收数据发给另一个程序C,如果这时接收程序C关了,那么转发程序不再接收数据,而第一个程序一直在发数据

A客户端调用sendto发数据给B客户端
B客户端接受数据后,sendto给C客户端
如果C客户端未开,B发送1条数据后,发送后无异常也不知道成功没,但B不再接收A客户端的数据,即receiveFrom方法也不能用
如果C客户端一直开,则B客户端既能接收数据,又能发送数据

B就是个转发的,C断了之后,B竟然不接收A的数据了

请问大神们,这是个什么原因

1个回答

你现在,是开发中间转发功能,B客户端吗?
一般使用socket ,收发数据时,都会检测socket是否有效,若无效,便不再收发数据,并返回错误码,函数调用者,检测返回码并处理。
是在编码中,开发者自己实现的,或有自动生成的,需要自己修改.
是一对一转发,??
请把使用情景说明清楚,
这应该在编码中自己判断处理解决

tiigger
tiigger 我只是想找出来这个更深层次的原因,也能对socket更加了解
2 年多之前 回复
tiigger
tiigger socket一直有效,而且udp也无法判断是否连接,也不会报异常,建议你试一下,当一个socket使用udp的方式发送数据到一个断开的客户端后,他是不会再接收到数据的,这个问题我已解决,用了一个新的socket专门发数据
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C#里用socket收发udp数据的问题

一:用udp收发数据,为什么接收方要发一帧数之后才能接收到数据? private Socket SetupUdpSocketObject(string localIp, string localPort, string remoteIp, string remotePort) { //得到本机IP,设置TCP端口号 var ip = new IPEndPoint(IPAddress.Parse(localIp), int.Parse(localPort)); var ret = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); //绑定网络地址 ret.Bind(ip); var sender = new IPEndPoint(IPAddress.Any, 0); _remote = sender; EndPoint point = new IPEndPoint(IPAddress.Parse(remoteIp), int.Parse(remotePort)); ret.SendTo(new byte[] { 1, 2, 3 }, point); //发送一帧数据才能收到数据 return ret; } private void ProcessUdpData() { while (true) { var data = new byte[DataMaximumLength]; //发送接受信息 var recv = _udpSocket.ReceiveFrom(data, ref _remote); _recorder.RecordBytes(data, 0, recv); //记录数据 var cell = new AzimuthCell(data); NotifyAllObservers(cell); //发送通知 } } 如果不写ret.SendTo(new byte[] { 1, 2, 3 }, point); 就收不到数据。 二:socket接收和发送数据我都是用线程发送,一个while(true)循环,反复sendto发缓存区,反复recvfrom,但是这样两个线程的占用率很高,有没有其他办法收发数据,除了beginsendto和beginrecvfrom

C# UDP接收不到其他电脑发来的数据

做了一个局域网UDP传输数据的东西,在同一台电脑上测试的时候可以收到数据,发送端放到别的电脑上就收不到了,不知道是什么原因,求教各位大神!! cls_interface.localHost cls_interface._socketRev 是static的 这是接收的代码 ``` cls_interface.localHost = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8001); cls_interface._socketRev = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); cls_interface._socketRev.Bind(cls_interface.localHost); while (!cls_interface.IsStopRev) { if (!cls_interface.IsSuspendRev) { byte[] buffer = new byte[1024]; int len = 0; IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0); EndPoint Remote = (EndPoint)remoteEP; len = cls_interface._socketRev.ReceiveFrom(buffer, ref Remote); //获取读取到的信息 if (len > 0) { byte[] revbts = new byte[len]; for (int i = 0; i < len; i++) { revbts[i] = buffer[i]; } get_udp_data(revbts); pointsCount++; } }//判断是否暂停 } ``` 这是发送代码 ``` public void SendData() { double x = 0; double i = 0; while (true) { i+=0.5; revdData revdata; /* revdata 结构体赋值*/ //将结构体转换成byt[] Type type = typeof(revdData); int size = Marshal.SizeOf(type); IntPtr buffer=Marshal.AllocHGlobal(size); Marshal.StructureToPtr(revdata, buffer, false); byte[] bts=new byte[size]; Marshal.Copy(buffer,bts,0,size); double sd = Math.Sin(x); _socket.SendTo(bts, new IPEndPoint(IPAddress.Parse("192.168.1.2"), 8001)); Marshal.FreeHGlobal(buffer); Thread.Sleep(100); x += 0.1; } } ``` ```

C# udp 向设备发报文,,取得设备返回的数据

C# udp 向设备发报文,取得设备返回的数据 给个例子吧

关于MFC下的UDP通信,为什么ReceiveFrom时只能接受到一字节数据

void CCHATDlg::OnBnClickedSendButton() { CString str,sIP; GetDlgItemText(IDC_SEND_EDIT, str); GetDlgItemText(IDC_IP_EDIT, sIP); m_sock.SendTo(str, str.GetLength(),PORT, sIP); } void CCHATDlg::Onreceive(void) { CString sIP; char s[256]; UINT nPort; int nRetun; nRetun = m_sock.ReceiveFrom(s, sizeof(s), sIP, nPort); s[nRetun] = 0; COleDateTime time = COleDateTime::GetCurrentTime(); CString str = sIP + "(" + time.Format(_T("%H:%M:%S")) + "):\r\n" + s + "\r\n"; CEdit *pEdit = (CEdit *)GetDlgItem(IDC_RECV_EDIT); pEdit->SetSel(pEdit->GetWindowTextLength(), -1); pEdit->ReplaceSel(str); //SetDlgItemText(IDC_RECV_EDIT, str); }

按照网上说的unity中使用udp的方法开了线程接受消息,但是接受不到啊?

这是代码,recvfrom一直是阻塞的,确定服务端有回复了,但是就是收不到,这个方法是网上都在转载的unity使用udp的方法。无语了。 ``` using UnityEngine; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; public class UdpHandler : MonoBehaviour { public static UdpHandler instance; /// <summary> /// 目标socket /// </summary> Socket socket; /// <summary> /// 服务端 /// </summary> EndPoint serverEnd; /// <summary> /// 服务端端口 /// </summary> IPEndPoint ipEnd; /// <summary> /// /接收的数据,必须为字节 /// </summary> byte[] recvData = new byte[20]; /// <summary> /// 连接线程 /// </summary> Thread connectThread; void Start() { InitSocket(); instance = this; } /// <summary> /// 初始化 /// </summary> public void InitSocket() { //定义连接的服务器ip和端口,可以是本机ip,局域网,互联网 ipEnd = new IPEndPoint(IPAddress.Parse("192.168.1.105"), 8888); //定义套接字类型,在主线程中定义 socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); //定义服务端 IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); serverEnd = (EndPoint)sender; //开启一个线程连接,必须的,否则主线程卡死 connectThread = new Thread(new ThreadStart(SocketReceive)) { IsBackground = true }; connectThread.Start(); } public void SocketSend(byte[] sendStr) { //发送给指定服务端 socket.SendTo(sendStr, sendStr.Length, SocketFlags.None, ipEnd); } /// <summary> /// 服务器接收 /// </summary> void SocketReceive() { while (true) { recvData = new byte[1024]; socket.ReceiveFrom(recvData, ref serverEnd); SendMessage("MessageReceiveHandler", recvData); } } /// <summary> /// 连接关闭 /// </summary> public void SocketQuit() { //关闭线程 if (connectThread != null) { connectThread.Interrupt(); connectThread.Abort(); } //最后关闭socket if (socket != null) { socket.Close(); } } } ```

UDP绑定本地端口和IP,用sendto向指定端口发广播数据失败

MFC下,上位机采用UDP协议,绑定本地端口60000,向目标端口50000发送广播数据,然后单片机应答。但是上位机调用sendto函数发送失败!

在win7中使用socket UDP 编程时,数据发送不出来

各位大哥大姐,我在使用 socket 做 UDP编程时,遇到一个非常奇怪的问题 1,在win7下使用 sendto 函数发送数据时,sendto函数的返回值正常,但是有时候没有数据发送出来(抓不到数据包),但是当拔掉网线,重插一下就有数据了,但是待会儿就又没有了(这个不是网线接触不好,因为电脑上网一直正常) 2,同样程序,在XP系统里没有问题 求高手指点,感激不尽!!!!!

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)

.Net UDP Socket 通讯时 如何实现客户端连续发信息或服务端连续发信息

本人是新手,写了 C# 的UDP SOcket 通讯程序,目前只实现了 客户端向服务端发送消息,服务端收到消息后回复消息,而 不能实现客户端连续向服务端发消息,服务端连续回复消息。 在查找资料说要使用多线程,但是我不懂,请求高手指导。代码如下: Client: private void btSendMsg_Click(object sender, EventArgs e) { byte[] data = new byte[1024]; string input; //设置服务IP,设置端口号 IPEndPoint ipep = new IPEndPoint(IPAddress.Parse(txtServerIP.Text.ToString()), 8001); //定义网络类型,数据连接类型和网络协议UDP Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); string welcome = "Hello! "; data = Encoding.ASCII.GetBytes(welcome); server.SendTo(data, data.Length, SocketFlags.None, ipep); IPEndPoint senderIP = new IPEndPoint(IPAddress.Any, 0); EndPoint Remote = (EndPoint)senderIP; data = new byte[1024]; int recv = server.ReceiveFrom(data, ref Remote); input = txtSend.Text; server.SendTo(Encoding.ASCII.GetBytes(input), Remote); data = new byte[1024]; recv = server.ReceiveFrom(data, ref Remote); txtRec.Text = Encoding.ASCII.GetString(data, 0, recv); server.Close(); } Server: private void btRec_Click(object sender, EventArgs e) { int recv; byte[] data = new byte[1024]; //得到本机IP,设置端口号 IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 8001); Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); newsock.Bind(ipep); //得到客户机IP IPEndPoint senderIP = new IPEndPoint(IPAddress.Any, 0); EndPoint Remote = (EndPoint)(senderIP); recv = newsock.ReceiveFrom(data, ref Remote); string welcome = "Welcome ! "; //字符串与字节数组相互转换 data = Encoding.ASCII.GetBytes(welcome); string strReturn; data1 = Encoding.ASCII.GetBytes(strReturn); //发送信息 newsock.SendTo(data, data.Length, SocketFlags.None, Remote); data = new byte[2048]; //发送接受信息 recv = newsock.ReceiveFrom(data, ref Remote); txtSerRev.Text = (Encoding.ASCII.GetString(data, 0, recv)); newsock.SendTo(data, data.Length, SocketFlags.None, Remote); }

linux udp通信不成功,server收不到消息

仅仅是一个 示例,可是先执行server 后执行 client ,server还是没有收到消息。问题出在哪里呢 Server.c #include "server.h" #define PORT 2345 #define IP "192.168.0.114" int main (void) { int fd; struct sockaddr_in servaddr, cliaddr; char buf[BUFFER_SIZE]; socklen_t peerlen; //建立socket连接 fd = socket(AF_INET, SOCK_DGRAM, 0); if(fd == -1) { printf("fd error!\n"); return -1; } //设置sockaddr_in参数 bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(PORT); servaddr.sin_addr.s_addr = inet_addr(IP); //绑定 bind(fd, (struct sockaddr *)&servaddr, sizeof(servaddr)); if(bind < 0) { printf("bind error~!\n"); return -1; } //调用recvfroom,等待接收客户端数据 peerlen = sizeof(cliaddr); while(1) { printf("Begin recv!\n"); recvfrom(fd, buf, sizeof(buf), 0, (struct sockaddr *)&cliaddr ,&peerlen); printf("recv form client %s \n", buf); strcpy(buf, "Welcome to server"); sendto(fd, &buf, sizeof(buf), 0, (struct sockaddr *)&cliaddr ,peerlen); } close(fd); return 0; } client.c: #include "client.h" #define PORT 2345 #define IP "192.168.0.114" int main (void) { int fd; struct sockaddr_in servaddr; char buf[BUFFER_SIZE] = "Hello Server!"; //建立socket连接 fd = socket(AF_INET, SOCK_DGRAM, 0); if(fd == -1) { printf("fd error \n"); exit(-1); } //设置sockaddr_in参数 bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(PORT); servaddr.sin_addr.s_addr = inet_addr(IP); //向服务器发送消息 sendto(fd, buf, sizeof(buf), 0 ,(struct sockaddr *)&servaddr,sizeof(servaddr)); printf("Send message to Sever!\n"); //接收服务器消息 printf("Begin recv!\n"); recvfrom(fd, buf, sizeof(buf), 0 ,NULL ,NULL); if(recvfrom < 0) { printf("recv error!\n"); return 1; } printf("recv from Server %s \n", buf); close(fd); return 0; }

UDP组播通信,发送数据正常,但是只能接受到本机发出的数据,为什么?

UDP组播通信,发送数据正常,但是只能接受到本机发出的数据,收不到其他机器发出的数据。这是代码:`enter code here`Send_ACT_time_interval_set(); int nlen=sizeof(sact); memcpy(sendbuf,(char*)&sact,sizeof(sendbuf)); int nlenm=sizeof(sendbuf); int nlenn=sendto(socketMul,sendbuf,nlenm,0,(SOCKADDR*)&addrMul,sizeof(addrMul)); char recvbuf[1024]; if(nlenn>0) { printf("success send sock\n"); //closesocket(socketMul); //Sleep(1000); while(1) { int len=sizeof(addrMul); int mlen=strlen(recvbuf); int nret=recvfrom(socketMul,recvbuf,strlen(recvbuf),0,(SOCKADDR*)&addrMul,&len); if(nlen>0) { printf("success recv sock\n"); closesocket(socketMul); WSACleanup(); break; 请高手指点一下!!!

C++ 中的sendTo和recvFrom函数问题

请看代码,addrClient不赋值recvfrom依然可以收到另一个电脑发送的数据;sendto也能发送数据到另一个电脑,为什么????? ``` WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested=MAKEWORD(2,2); err = WSAStartup(wVersionRequested, &wsaData); if (err != 0) { return; } if (LOBYTE(wsaData.wVersion)!=2 || HIBYTE(wsaData.wVersion)!=2) { WSACleanup(); return; } SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); SOCKADDR_IN addrSrv; // addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY); addrSrv.sin_addr.S_un.S_addr=inet_addr("192.168.1.253"); addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6000); bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); SOCKADDR_IN addrClient;//addrClient不赋值依然可以收到和发送数据,为什么????? // memset(&addrClient, 0, sizeof(addrClient)); // addrClient.sin_addr.S_un.S_addr=inet_addr("192.168.1.46"); // addrClient.sin_family=AF_INET; // addrClient.sin_port=htons(8080); int len=sizeof(SOCKADDR); char recvBuf[100]; int count = recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len); sendto(sockSrv,"nullptr", strlen("nullptr")+1, 0, (SOCKADDR*)&addrClient,len); for(int i = 0; i < count; i++) printf("%d\n",recvBuf[i]); closesocket(sockSrv); WSACleanup(); ```

windows下udp通信,我想传输int型数据数组,而不是char字符数组,怎么传输啊?

似乎sendto函数和recvfrom函数在windows下只能传输char数据或数组,对于int数据或是其他类型数据或结构体都不能传输,这个问题怎么解决啊?我想传输int型数组啊。。 ​linux下可是什么类型都能传输啊。。。 下面是发送函数sendto和接受函数recvfrom的定义: C++系统声明 int PASCAL FAR sendto ( IN SOCKET s, IN const char FAR * buf, IN int len, IN int flags, IN const struct sockaddr FAR *to, IN int tolen); recvfrom函数(经socket接收数据): 函数原型:ssize_t recvfrom(int sockfd,void *buf,int len,unsigned int flags, struct sockaddr *from,socket_t *fromlen); 求大神赐教,弄了一周也没弄出个好的方法。。

初学UDP,点击发送没有反应

using System; using System.Text; using System.Windows.Forms; using System.Net; using System.Net.Sockets; using System.Threading; namespace UDP { public partial class Form1 : Form { private IPEndPoint ipLocalPoint; private EndPoint RemotePoint; private Socket mySocket; private bool RunningFlag = false; public Form1() { InitializeComponent(); int port; IPAddress ip; //得到本机IP,设置UDP端口号 ip = getValidIP(tbLocalIP.Text); port = getValidPort(tbLocalPort.Text); ipLocalPoint = new IPEndPoint(ip, port); //定义网络类型,数据连接类型和网络协议UDP mySocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); //绑定网络地址 mySocket.Bind(ipLocalPoint); //得到客户机IP ip = getValidIP(tbRemoteIP.Text); port = getValidPort(tbRemotePort.Text); IPEndPoint ipep = new IPEndPoint(ip, port); RemotePoint = (EndPoint)(ipep); //启动一个新的线程,执行方法this.ReceiveHandle, //以便在一个独立的进程中执行数据接收的操作 RunningFlag = true; Thread thread = new Thread(new ThreadStart(this.ReceiveHandle)); thread.Start(); } //private string getIPAddress() //{ // //获得本机局域网IP地址 // IPAddress[] AddressList = Dns.GetHostEntry(Dns.GetHostName()).AddressList; // if (AddressList.Length < 1) // { // return ""; // } // return AddressList[0].ToString(); //} private int getValidPort(string port) { int lport; //测试端口号是否有效 try { //是否为空 if (port == "") { throw new ArgumentException("端口号无效,不能启动DUP"); } lport = System.Convert.ToInt32(port); } catch (Exception e) { //ArgumentException, //FormatException, //OverflowException Console.WriteLine("无效的端口号:" + e.ToString()); this.tbMsg.AppendText("无效的端口号:" + e.ToString() + "\n"); return -1; } return lport; } private IPAddress getValidIP(string ip) { IPAddress lip = null; //测试IP是否有效 try { //是否为空 if (!IPAddress.TryParse(ip, out lip)) { throw new ArgumentException( "IP无效,不能启动DUP"); } } catch (Exception e) { //ArgumentException, //FormatException, //OverflowException Console.WriteLine("无效的IP:" + e.ToString()); this.tbMsg.AppendText("无效的IP:" + e.ToString() + "\n"); return null; } return lip; } //定义一个委托 //在 WinForm开发过程中经常会用到线程,有时候还往往需要在线程中访问线程外的控件; //比如:设置textbox的Text属性等等。如果直接设置程序必定会报出:从不是创建控件的线程访问它,这个异常。 //通常我们可以采用两种方法来解决。一是通过设置control的属性。二是通过delegate,而通过delegate也有两种方式,一种是常用的方式,另一种就是匿名方式。下面加以说明. public delegate void MyInvoke(string strRecv); private void ReceiveHandle() { //接收数据处理线程 string msg; byte[] data = new byte[1024]; MyInvoke myI = new MyInvoke(UpdateMsgTextBox); while (RunningFlag) { if (mySocket == null || mySocket.Available < 1) { Thread.Sleep(200); continue; } //跨线程调用控件 //接收UDP数据报,引用参数RemotePoint获得源地址 int rlen = mySocket.ReceiveFrom(data, ref RemotePoint); msg = Encoding.Default.GetString(data, 0, rlen); tbMsg.BeginInvoke(myI, new object[] { RemotePoint.ToString() + " : " + msg }); } } private void btSend_Click(object sender, EventArgs e) { string msg = tbSendMsg.Text; //发送UDP数据包 byte[] data = Encoding.Default.GetBytes(msg); mySocket.SendTo(data, data.Length, SocketFlags.None, RemotePoint); } private void UpdateMsgTextBox(string msg) { //接收数据显示 this.tbMsg.AppendText(msg + "\n"); } } }

linux c写了一个UDP服务器,然后通过网络助手做作为客户端,UDP无法接收到数据

#include <sys/types.h> #include <sys/socket.h> #include<pthread.h> #include <netinet/in.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include<arpa/inet.h> //#include<cstdlib.h> char* PORT="5588"; //server's port char* SOCKET_SERVER_IP="192.168.1.105"; // int main() { printf("Welcome! This is a UDP server, I can only received message from client and reply with same message\n"); struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(atoi(PORT)); addr.sin_addr.s_addr = htonl(INADDR_ANY); int sock; if ( (sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { perror("socket"); exit(1); } //port bind to server if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) { perror("bind"); exit(1); } char buff[512]; struct sockaddr_in clientAddr; memset(&clientAddr,0,sizeof(clientAddr)); size_t n; socklen_t len = sizeof(clientAddr); while (1) { n = recvfrom(sock, buff, 511, 0, (struct sockaddr*)&clientAddr, &len); if (n>0) { buff[n] = 0; printf("%s %u says: %s\n", inet_ntoa(clientAddr.sin_addr), ntohs(clientAddr.sin_port), buff); n = sendto(sock, buff, n, 0, (struct sockaddr *)&clientAddr, sizeof(clientAddr)); if (n < 0) { perror("sendto"); break; } } else { perror("recv"); break; } } return 0; } 然后网络助手设置如下,防火墙那些都关闭了。![图片说明](https://img-ask.csdn.net/upload/201911/22/1574436191_472978.png)![图片说明](https://img-ask.csdn.net/upload/201911/22/1574436199_451099.png)![图片说明](https://img-ask.csdn.net/upload/201911/22/1574436203_191706.png) 很奇怪,为何服务器会收不到网络助手发的数据,求解啊。卡了2天了

c#SOCKET由于套接字没有连接并且没有提供地址,发送或接收数据的请求没有被接受。

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Net; using System.Net.Sockets; using System.IO; using System.Threading; namespace WpfApplication31 { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { private static TcpClient client = new TcpClient(); public MainWindow() { //TcpClient tcp = new TcpClient(); //tcp.Connect("127.0.0.1", 333); //if (!tcp.Connected) //{ // Test.Content = "xxxx"; //} Thread t1 = new Thread(ExceMethod); t1.IsBackground = true; t1.Start(); } private void ExceMethod() { while (true) { TcpClient Client = new TcpClient(); Client.Connect("127.0.0.1", 333); byte[] data = Encoding.UTF8.GetBytes("客户端数据"); Socket socket = client.Client; socket.Send(data, data.Length, SocketFlags.None); //Console.WriteLine("发送成功" + Encoding.UTF8.GetString(data)); socket.Receive(data, SocketFlags.None); Console.WriteLine("接受数据" + Encoding.UTF8.GetString(data)); Thread.Sleep(1000); } } } } —————————————————————————————— using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Net; using System.Net.Sockets; using System.IO; using System.Threading; namespace WpfApplication32 { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public MainWindow() { IPAddress iPAddress = IPAddress.Any; tcpServer = new TcpListener(iPAddress, 333); //999是端口号,可以随便改 0-1024,主要不要和什么80,8080之类的常用端口号相冲突哦。 tcpServer.Start(); Thread t1 = new Thread(ExceMethod); t1.IsBackground = true; t1.Start(); } private static TcpListener tcpServer = null; private static byte[] bytes = new byte[256]; private void ExceMethod() { byte[] msg = Encoding.UTF8.GetBytes("服务端数据"); while (true) { TcpClient client = tcpServer.AcceptTcpClient(); while (true) { try { int i = client.Client.Receive(bytes); Console.WriteLine(DateTime.Now.ToString("G") + "接受:" + Encoding.UTF8.GetString(bytes)); string Mes = Encoding.UTF8.GetString(bytes); client.Client.Send(msg); } catch { break; } } client.Close(); Thread.Sleep(1000);//10000单位是毫秒,系统在运行过程中,稍微有点停顿,个人感觉会更好一点。 } } } }

Linux socket udp发送数据返回socket错误22

linux下用c网络编程用sendto发送数据,总返回socket error代号22是什么错误呢?

由于套接字没有连接并且没有提供地址,发送或接收数据的请求没有被接受?

服务器往客户端发送消息的时候报这个错: 错误定在://异步发送消息请求 server_socket.BeginSend(sendData, 0, sendData.Length, SocketFlags.None, new System.AsyncCallback(SendToServer), server_socket); 但是这是我按着客户端发消息的代码一点点改的不应该有错啊,百思不得原因,希望大佬助我!!! 贴上代码: ``` using UnityEngine; using System.Collections; using System.Net.Sockets; using System.Net; using System.Text; public class ServerScript : MonoBehaviour { //收到消息后的委托回调 public delegate void ReceiveCallBack(string content); private string receive_str; Socket server; string msg = ""; //服务器端收到消息的存储空间 byte[] ReceiveBuffer = new byte[1024]; //服务器收到消息后的回调委托 private ReceiveCallBack callback; private Socket server_socket; private readonly object locker = new object(); // Use this for initialization void Start() { //初始化服务器 InitServer((string content) => { receive_str = content; }); } //初始化服务器信息 public void InitServer(ReceiveCallBack cb) { this.callback = cb; // 1. server_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // 2. IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 5001); // 3. server_socket.Bind(endPoint); // 4. server_socket.Listen(10); // 5.开始异步等待客户端的请求链接 server_socket.BeginAccept(new System.AsyncCallback(Accept), server_socket); this.callback("开启服务器" + endPoint.ToString()); } void OnGUI() { if (receive_str != null) { GUILayout.Label(receive_str); } msg = GUI.TextField(new Rect(0, 0, 500, 40), msg); if (GUI.Button(new Rect(0, 50, 100, 30), "Send")) { SendMessage(msg); } } //接受到客户端的链接请求后的回调函数 void Accept(System.IAsyncResult ar) { //获取正在工作的Socket对象 Socket socket = ar.AsyncState as Socket; //存储异步操作的信息,以及用户自定义的数据 Socket worker = socket.EndAccept(ar); SocketError error; //开始异步接收客户端发送消息内容 worker.BeginReceive(ReceiveBuffer, 0, ReceiveBuffer.Length, SocketFlags.None, new System.AsyncCallback(Receive), worker); //继续异步等待新的客户端链接请求 socket.BeginAccept(new System.AsyncCallback(Accept), socket); } //服务端收到客户端的消息后的回调函数 void Receive(System.IAsyncResult ar) { //获取正在工作的Socket对象 Socket worker = ar.AsyncState as Socket; int ByteRead = 0; try { ByteRead = worker.EndReceive(ar); } catch (System.Exception ex) { this.callback(ex.ToString()); } if (ByteRead > 0) { string Content = Encoding.Default.GetString(ReceiveBuffer); this.callback(Content); } //继续异步等待客户端的发送消息请求 worker.BeginReceive(ReceiveBuffer, 0, ReceiveBuffer.Length, SocketFlags.None, new System.AsyncCallback(Receive), worker); } public void SendMessage(string message) { if (message == null) return; message += "\r\n"; byte[] sendData = Encoding.UTF8.GetBytes(message); //异步发送消息请求 server_socket.BeginSend(sendData, 0, sendData.Length, SocketFlags.None, new System.AsyncCallback(SendToServer), server_socket); } //发送消息结束的回调函数 void SendToServer(System.IAsyncResult ar) { Socket worker = ar.AsyncState as Socket; worker.EndSend(ar); } } ``` ![图片说明](https://img-ask.csdn.net/upload/201903/14/1552558158_433687.png)

socket UDP发送数据返回10013

win7系统,已经是Administrator用户,单播使用的28900端口,并没有其他进程占用端口。在使用sendFrameData函数之前,用了一次广播sendFrameBoradCast。之后在使用单播时,就出现10013错误码,请各位大大帮我解答,谢谢了!!! int IBUdpDev::sendFrameBoradCast(IBFrame &mFrame) { int errCode = -1;; DWORD sendLen = 0; DWORD dataLen = 0; errCode = WSAStartup(MAKEWORD(2, 2), &wasData); if (errCode != 0) { return -1; } SOCKET bcSocket = socket(AF_INET, SOCK_DGRAM, 0); if (bcSocket == INVALID_SOCKET) { errCode = WSAGetLastError(); closesocket(bcSocket); printf("%s: socket eror errCode:%d\n", __func__, errCode); return errCode; } //3.设置该套接字为广播类型, bool opt = true; setsockopt(bcSocket, SOL_SOCKET, SO_BROADCAST, reinterpret_cast<char FAR *>(&opt), sizeof(opt)); //4.设置发往的地址 sockaddr_in addrbc; //发往的地址 memset(&addrbc, 0, sizeof(addrbc)); addrbc.sin_family = AF_INET; //地址类型为internetwork addrbc.sin_addr.s_addr = INADDR_BROADCAST; //设置ip为广播地址 addrbc.sin_port = htons(BROADCAST_PORT); //端口号为 int nlen = sizeof(addrbc); sendLen = mFrame.getFrameLen(); dataLen = sendLen; BYTE *data = mFrame.getFrameBuffer(); if (!data) { closesocket(bcSocket); printf("%s: !data errCode:%d\n", __func__, errCode); return errCode; } while (dataLen > 1024) { if (sendto(bcSocket, (char *)&data[sendLen - dataLen], 1024, 0, reinterpret_cast<sockaddr*>(&addrbc), nlen) == SOCKET_ERROR) { errCode = WSAGetLastError(); closesocket(bcSocket); printf("%s: sendto 11 errCode:%d\n", __func__, errCode); return errCode; } dataLen = dataLen - 1024; } if (dataLen > 0) { if (sendto(bcSocket, (char *)&data[sendLen - dataLen], dataLen, 0, reinterpret_cast<sockaddr*>(&addrbc), nlen) == SOCKET_ERROR) { errCode = WSAGetLastError(); closesocket(bcSocket); printf("%s: sendto 22 errCode:%d\n", __func__, errCode); return errCode; } dataLen = 0; } closesocket(bcSocket); WSACleanup(); return 0; } int IBUdpDev::sendFrameData(IBFrame &mFrame, const char *mIp, int mPort) { int errCode = -1;; DWORD sendLen = 0; DWORD dataLen = 0; errCode = WSAStartup(MAKEWORD(2, 2), &wasData); if (errCode != 0) { return errCode; } SOCKET sendSocket= socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (sendSocket == INVALID_SOCKET){ errCode = WSAGetLastError(); closesocket(sendSocket); return errCode; } //4.设置发往的地址 sockaddr_in addrsend; //发往的地址 memset(&addrsend, 0, sizeof(addrsend)); addrsend.sin_family = AF_INET; //地址类型为internetwork addrsend.sin_addr.s_addr = inet_addr(mIp); //设置ip为 addrsend.sin_port = htons(mPort); //端口号为 int nlen = sizeof(addrsend); sendLen = mFrame.getFrameLen(); dataLen = sendLen; BYTE *data = mFrame.getFrameBuffer(); if (!data) { closesocket(sendSocket); printf("%s: !data errCode:%d\n", __func__, errCode); return errCode; } if (dataLen > 0) { if (sendto(sendSocket, (char *)&data[sendLen - dataLen], dataLen, 0, reinterpret_cast<sockaddr*>(&addrsend), nlen) == SOCKET_ERROR) { errCode = WSAGetLastError(); closesocket(sendSocket); printf("%s: sendto 22 errCode:%d\n", __func__, errCode); return errCode; } dataLen = 0; } closesocket(sendSocket); WSACleanup(); return 0; }

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

Intellij IDEA 实用插件安利

1. 前言从2020 年 JVM 生态报告解读 可以看出Intellij IDEA 目前已经稳坐 Java IDE 头把交椅。而且统计得出付费用户已经超过了八成(国外统计)。IDEA 的...

搜狗输入法也在挑战国人的智商!

故事总是一个接着一个到来...上周写完《鲁大师已经彻底沦为一款垃圾流氓软件!》这篇文章之后,鲁大师的市场工作人员就找到了我,希望把这篇文章删除掉。经过一番沟通我先把这篇文章从公号中删除了...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

魂迁光刻,梦绕芯片,中芯国际终获ASML大型光刻机

据羊城晚报报道,近日中芯国际从荷兰进口的一台大型光刻机,顺利通过深圳出口加工区场站两道闸口进入厂区,中芯国际发表公告称该光刻机并非此前盛传的EUV光刻机,主要用于企业复工复产后的生产线扩容。 我们知道EUV主要用于7nm及以下制程的芯片制造,光刻机作为集成电路制造中最关键的设备,对芯片制作工艺有着决定性的影响,被誉为“超精密制造技术皇冠上的明珠”,根据之前中芯国际的公报,目...

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

百度工程师,获利10万,判刑3年!

所有一夜暴富的方法都写在刑法中,但总有人心存侥幸。这些年互联网犯罪高发,一些工程师高技术犯罪更是引发关注。这两天,一个百度运维工程师的案例传遍朋友圈。1...

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

《Oracle Java SE编程自学与面试指南》最佳学习路线图2020年最新版(进大厂必备)

正确选择比瞎努力更重要!

字节跳动面试官竟然问了我JDBC?

轻松等回家通知

面试官:你连SSO都不懂,就别来面试了

大厂竟然要考我SSO,卧槽。

实时更新:计算机编程语言排行榜—TIOBE世界编程语言排行榜(2020年6月份最新版)

内容导航: 1、TIOBE排行榜 2、总榜(2020年6月份) 3、本月前三名 3.1、C 3.2、Java 3.3、Python 4、学习路线图 5、参考地址 1、TIOBE排行榜 TIOBE排行榜是根据全世界互联网上有经验的程序员、课程和第三方厂商的数量,并使用搜索引擎(如Google、Bing、Yahoo!)以及Wikipedia、Amazon、YouTube统计出排名数据。

立即提问
相关内容推荐