c# - Converting windows sockets to .NET -


i have pretty simple sockets connection seems work under winsock 2.0 not @ under .net. thing know 1 works , other not @ all, i'm not sure how debug it.

windows sockets version:

int_ptr callback connectdialogproc (hwnd hwnddlg, uint umsg, wparam wparam, lparam lparam) {     socket connectme;     int status, cremoteaddr;     lresult itemdata;     sockaddr_in sockaddr, remoteaddr;     cerdispinfo info;     bool freuseaddr = true;      switch (umsg) {     case wm_initdialog :         memset (&sockaddr, 0, sizeof(sockaddr));         sockaddr.sin_family = af_inet;         sockaddr.sin_port = htons(987);         sockaddr.sin_addr.s_un.s_addr = htonl(inaddr_any);         connectme = socket (af_inet, sock_dgram, 0);         setsockopt (connectme, sol_socket, so_reuseaddr, (char *)&freuseaddr, sizeof(freuseaddr));         bind (connectme, (sockaddr *)&sockaddr, sizeof(sockaddr));         wsaasyncselect (connectme, hwnddlg, wm_connect_me, fd_read);         setwindowlong (hwnddlg, gwl_userdata, (long)connectme);         return true;     case wm_connect_me :         connectme = (socket)wparam;         cremoteaddr = sizeof(remoteaddr);         status = recvfrom (connectme, (char*)&info, sizeof(info), 0, (sockaddr*)&remoteaddr, &cremoteaddr);         if (status != socket_error)                 {             // convert ip addr host order             itemdata = ntohl(remoteaddr.sin_addr.s_un.s_addr);         }         return true;     }     return false; } 

and here equivalent .net version:

public form1() {     initializecomponent();      socket socket = new socket(addressfamily.internetwork, sockettype.dgram, protocoltype.unspecified);      socketasynceventargs socketeventarg = new socketasynceventargs();     socketeventarg.completed += new eventhandler<socketasynceventargs>(socketeventarg_completed);      socketeventarg.remoteendpoint = new ipendpoint(ipaddress.any, 987);     socket.setsocketoption(socketoptionlevel.socket, socketoptionname.reuseaddress, true);     socket.bind(new ipendpoint(ipaddress.any, 987));     socket.connectasync(socketeventarg); }  void socketeventarg_completed(object sender, socketasynceventargs e) {     boolean b = true; } 

the .net version never hits 'boolean b = true' breakpoint while c++ winsocks 1 reports there device within second or so, every time. tried reversing byte order in port in .net version 56067 didn't work either. missing? looks .net doesn't accept remote endpoint of 0.0.0.0...

this solved issue:

form1() {     udpclient client = new udpclient(987);     client.beginreceive(udpclient_callback, client); }  void udpclient_callback(iasyncresult result) {  } 

thanks guys looking!


Comments

Popular posts from this blog

c# - Send Image in Json : 400 Bad request -

jquery - Fancybox - apply a function to several elements -

An easy way to program an Android keyboard layout app -