Tag: winsock

UDP WinSock – 未接收广播数据包

我正在测试一个简单的套接字设置,其中服务器侦听指定的端口,并且客户端发送应该由该服务器接收的广播数据包。 这种设置在直接发送消息(即不是广播)时工作正常,但是在服务器上从未接收到广播数据包时。 一些代码(为简单起见,删除了错误检查): // Client (broadcast sender) // Create and bind the client socket clientSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); sockaddr_in sockAddr; sockAddr.sin_family = AF_INET; sockAddr.sin_port = htons(5678); sockAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY); bind(clientSocket, (sockaddr*)(&sockAddr), sizeof(sockAddr)); u_long uMode = 1; ioctlsocket(clientSocket, FIONBIO, &uMode); char broadcast = 1; setsockopt(clientSocket, SOL_SOCKET, SO_BROADCAST, &broadcast, sizeof(broadcast)); // … // Send the packet […]

简单的网络服务器不起作用

我正在尝试在C中编写一个Web服务器。我知道我可以使用许多不同的库,但我希望它只能用winsock运行。 服务器和客户端可以来回发送数据,但加载网页是不可能的。 每次我收到“服务器无法访问”消息,但在服务器上我收到正在发送正文的消息。 我究竟做错了什么? 编辑我正在使用chrome和microsoft edge #include #include #include #pragma comment(lib,”ws2_32.lib”) void error(const char* err){ printf(“ERROR: %s\n”, err); exit(1); } char* readline(SOCKET s){ FILE * f = tmpfile(); char rec; int i=0; while(recv(s, &rec, 1, 0)>0){ i++; if(rec!=’\r’ && rec!=’\n’) fwrite(&rec, 1, 1, f); if(rec==’\r’ || rec==’\n’) break; } if(i==0){ fclose(f); return NULL; } fseek(f, […]

WinINet无法将文件下载到客户端?

我很好奇为什么我在使用这个function时遇到了麻烦。 我正在将Web上的PNG文件下载到目标路径。 例如,将Google图像下载到C:驱动器: netDownloadData(“ http://sofzh.miximages.com/c%2B%2B/logo1w.png ”,“c:\ file.png”); 下载后文件大小正确。 什么都没有返回假。 当我尝试打开它时,它不会显示图像。 任何想法都有帮助。 谢谢! 这是代码: bool netDownloadData(const char *strSourceUrl, const char *strDestPath) { HINTERNET hINet = NULL; HINTERNET hFile = NULL; char buffer[1024]; DWORD dwRead; String sTemp; FILE *fp = NULL; DWORD size = 0; // Open a new internet session hINet = netInit(); if (hINet == […]

(GET HTTP Request)使用winsock.h的C ++套接字

好的,在任何人得出结论之前(并且确实与我保持相关性),基本上,我正在尝试使用Winsock.h 在C / C ++中使用套接字创建Get Request 。 [ 运行SocketRequest函数时存在的主要问题 ] 我一直在从任何地方获得错误响应代码:“WSAENOTCONN 10057”到“WSAENOTSOCK 10038”,我在这里找到了更多相关信息: https ://msdn.microsoft.com/en-us/library/windows/desktop/ ms740668(v = vs.85)的.aspx 现在,这将与其他人无关,但更多的是我的情况。 我正在尝试使用“winsockx.h”在XBOX360 Devkit上实现它,当我创建“SocketRequest”时崩溃…这里是用于调试目的的代码WITH输出。 (我知道这通常不是你所看到的,所以按照你想要的方式) 这是包含的文件: #include “stdafx.h” #include #include “Hooks.h” #include #include #include #include #include #include #include 这是定义和实例: int Socket; struct sockaddr_in SocketAddress; char bufferReturn[10000]; char serverAddr[2000]; bool returnTEST = false; char *Request1; char *Request2; char *ResetRequest; […]

HTTP POST mutli part“BAD REQUEST”

我正在尝试使用POST上传文件 这是我的要求: POST /upload.php HTTP/1.1 Host: localhost Content-Type: multipart/form-data; boundary=—————————552335022525 Content-Length: 192 —————————–552335022525 Content-Disposition: form-data; name=”userfile”; filename=”12.txt” Content-Type: text/plain blabla —————————–552335022525– 使用HTTP live header firefox插件一切正常 但是当把它放在一个char *缓冲区并用winsocksapi发送它时,我得到400 Bad Request错误

在C中将字节转换为uint32

我不断通过TCP / IP将LabVIEW的像素值数组(uint32)发送到C程序。 我正在使用Ws2_32.lib中的recv函数来接收字节,但我必须将它们转换回uint32数据类型,并且在这种情况下并不真正知道如何操作。 如果有人知道如何做,我会感激不尽。 提前致谢 #define DEFAULT_BUFLEN 256 #include #include #pragma comment(lib,”ws2_32.lib”) //Winsock Library int main(int argc , char *argv[]) { WSADATA wsa; SOCKET s , new_socket; struct sockaddr_in server , client; int c; typedef unsigned char bytes[256]; typedef unsigned int uint32_t; int iResult; char recvbuf[DEFAULT_BUFLEN]; int recvbuflen = DEFAULT_BUFLEN; printf(“\nInitialising Winsock…”); if (WSAStartup(MAKEWORD(2,2),&wsa) […]

包含SDL时,简单的tcp echo程序无法正常工作?

我有这个奇怪的问题,每当我#include “SDL/SDL.h” ,我的Windows套接字程序都不会执行。 它可以编译但运行时不会执行任何操作。 当我删除#include “SDL/SDL.h”标头,编译并运行时,它又开始工作了吗? 我正在尝试使SDL和我的原始套接字程序工作,但我不明白这是错误的。 //#include “SDL/SDL.h” #define _WIN32_WINNT 0x501 #include #include #include #include #include #include #define MAXLEN 80 using namespace std; const int winsockVersion = 2; int main( int argc, char* args[] ) { WSADATA wsadata; if ( (WSAStartup(MAKEWORD(2,0),&wsadata)) == 0){ cout<<"-[ WSAStartup Initialized. ]" << endl; char PORT[MAXLEN]; char SERVER[MAXLEN]; cout […]

在Windows中的套接字上使用fprintf

我正在尝试在Windows上的套接字上使用fprintf。 许多在线示例都是UNIX示例 。 Windows的等效代码就是我在这里要问的。 最后,我想这样做: fprintf(file_handle_to_socket, “hello world\r\n”); 我不想使用WriteFile,snprintf或其他任何东西。 只是fprintf()。 或多或少显示步骤的伪代码将是有帮助的。 这是我到目前为止: unsigned short port = enter_port; int result = 0; WSADATA wsaData; result = WSAStartup(MAKEWORD(2, 2), &wsaData); struct sockaddr_in local; memset(&local, 0, sizeof(struct sockaddr_in)); local.sin_port = htons(port); local.sin_family = AF_INET; local.sin_addr.s_addr = htonl(INADDR_ANY); int sock = socket(AF_INET, SOCK_STREAM, 0); if(sock == INVALID_SOCKET) { fprintf(stdout,”invalid […]

C winsock“滚动解析”

我正在尝试从服务器接收数据并解析它。 http://pastebin.com/1kjXnXwq http://pastebin.com/XpGSgRBh 一切都按原样工作,但我想解析数据,而不是只是抓取它的块并打印出来。 所以有没有办法从winsock中获取数据,直到\ n然后停止并将其传递给另一个要解析的函数,一旦该函数返回继续从最后一点读取,直到另一个\ n显示并重复该过程,直到有什么都没收到? 应该执行此操作的函数称为msgLoop(),位于第二个pastebin行中。

SO_LINGER和关闭套接字(WINSOCK)

我正在写一个multithreading的winsock应用程序,我有一些关闭套接字的问题。 首先,是否有一些同时打开的sockets有限制? 让我们一起说32个sockets。 我在其中一个sockets上建立连接,并传递信息,一切正常。 问题是当我断开套接字然后重新连接到同一目的地时,我在SYN之后从服务器获得RST。 我没有服务器应用程序的代码,所以我无法调试它。 当我使用SO_LINGER并在每次会话结束时发送了一个RST标志 – 它起作用了。 但我不希望以这种方式结束我的联系。 当不使用SO_LINGER时,发送了FIN标志,但似乎连接并未真正关闭。 任何帮助? 谢谢