标签: winsock

套接字的关闭,断开,关闭和处理究竟做了什么?

很难找到关于这四种方法实际做什么的简单解释,针对网络编程新手.人们通常只是声明他们认为在特定场景中关闭套接字的正确方法,而不是在每个步骤背后的背景中发生的事情.

通过示教一个人对鱼的理念去,你能解释的Shutdown,Disconnect,CloseDispose方法呢?

.net c# sockets network-programming winsock

18
推荐指数
1
解决办法
8437
查看次数

Delphi,如何获取所有本地IP?

任何人都知道delphi中的一种方式获得本地ip地址的简单列表(例如tstrings).

我已经看过另一个相关的问题了,似乎无法将它们转换为delphi.

delphi ip winsock

17
推荐指数
3
解决办法
2万
查看次数

Boost :: asio winsock和winsock 2兼容性问题

我的项目使用的是使用winsock.h的windows.h,我需要包含使用winsock2的boost:assio.所以我收到很多错误,说Winsock.h已经包含在内了.我可以定义WIN32_LEAN_AND_MEAN.所以windows.h不会使用winsock.问题是,我需要windows.h来使用它,我只需要Asio用于异步定时器.我不需要winsock2.h.我试着搜索如何禁用其winsock2使用,我发现我可以通过在包含boost:asio之前定义BOOST_ASIO_NO_WIN32_LEAN_AND_MEAN来做到这一点,但我仍然得到相同的错误.

#include <windows.h>
#define BOOST_ASIO_NO_WIN32_LEAN_AND_MEAN
#include <boost/asio.hpp>
Run Code Online (Sandbox Code Playgroud)

错误

1> c:\ program files\boost\boost_1_47\boost\asio\detail\socket_types.hpp(22):致命错误C1189:#error:WinSock.h已包含在内

c++ winsock boost-asio winsock2 c-preprocessor

17
推荐指数
3
解决办法
3万
查看次数

winsock编译错误,它无法找到addrinfo结构和一些相关的函数

我刚刚通过"Beej的网络编程指南"一书开始学习winsock.我正在windows下编程并通过gcc运行它.这只是编写我的第一个服务器程序的开始,但是当我尝试编译时它给了我这些错误.

/* Server */
#include <iostream>
#include <windows.h>
#include <winsock2.h>
using namespace std;

const int winsockVersion = 2;
#define BACKLOG 10
#define PORT 3000


int main(void){

    WSADATA wsadata;
    if (WSAStartup(MAKEWORD(winsockVersion,0),&wsadata) == 0){


        struct addrinfo hints, *res;

        memset(&hints,0,sizeof hints);
        hints.ai_family = AF_INET;
        hints.ai_socktype = SOCK_STREAM;
        hints.ai_flags = AI_PASSIVE;

        if ( getaddrinfo(NULL,PORT,&hints,&res) == 0 ){
            cout<<"-Call to get addrinfo successful!." << endl;
        }

        cout<<"res af_family" << res->ai_family << endl;
    }




    //clear stuff
    if( WSACleanup() != 0){
        cout<<"-WSACleanup unsuccessful" << endl;
    }else{
        cout<<"-WSACleanup …
Run Code Online (Sandbox Code Playgroud)

c++ gcc winsock

16
推荐指数
1
解决办法
1万
查看次数

如何设置Winsock UDP套接字?

我想创建一个只向客户端发送数据的Winsock UDP套接字.我希望内核为我选择一个可用的端口.另一方面,我想指出要使用哪个本地IP,因为我正在运行一些nics.

我已经尝试梳理套接字选项的迷宫,以及与套接字地址设置为0的端口绑定无效.

我的代码是在Win32 C++中.

c++ sockets winapi udp winsock

15
推荐指数
2
解决办法
4万
查看次数

WSAStartup函数如何启动Winsock DLL的使用?

WSAStartup函数如何启动Winsock DLL的使用?

根据文件

WSAStartup函数必须是应用程序或DLL调用的第一个Windows套接字函数.它允许应用程序或DLL指定所需的Windows套接字版本,并检索特定Windows套接字实现的详细信息.应用程序或DLL只能在成功调用WSAStartup后发出更多Windows套接字函数.

这个函数初始化WSADATA数据结构,但在socket编程,我们不传递WSDATA任何功能,因此程序如何来了解Windows套接字版本和其他细节?

例如,在此代码中

#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32")

void Run(int argc, char* argv[])
{
    char* host = argc < 2 ? "" : argv[1];
    struct hostent* entry = gethostbyname(host);

    if(entry)
    {
        struct in_addr* addr = (struct in_addr*) entry->h_addr;
        printf("IP Address: %s\n", inet_ntoa(*addr));
    }
    else
        printf("ERROR: Resolution failure.\n");
}

int main(int argc, char* argv[])
{
    WSADATA wsaData;

    if(WSAStartup(0x202, &wsaData) == 0)
    {
        Run(argc, argv);
        WSACleanup();
    }
    else
        printf("ERROR: Initialization failure.\n");
}
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我正在 …

c winapi network-programming winsock wsastartup

15
推荐指数
1
解决办法
2万
查看次数

在socket和fd之间确定

在Unix 一切都是文件的函数方法read(),write(),close()不支持在Win32.

我想效仿,但不知道如何时区分sock插座FD上WinSocks2.

//returns 1 if `sock` is network socket, 
//        0 if `sock` is file desriptor (including stdio, stderr, stdout), ...
//       -1 in none of above
int is_net_socket(int sock)
{
    // ...?
}
Run Code Online (Sandbox Code Playgroud)

这应该如下:

int mysock  = socket(PF_INET, SOCK_STREAM, 0);
int myfd    = _open("my_file.txt", _O_RDONLY);

printf("1: %d    2: %d    3: %d    4:%d\n",
       is_net_socket(mysock),   //1
       is_net_socket(myfd),     //0
       is_net_socket(stdin),    //0
       is_net_socket(stderr));  //0

// should print "1: 1 …
Run Code Online (Sandbox Code Playgroud)

c sockets windows winsock winsock2

15
推荐指数
3
解决办法
2301
查看次数

UDP数据包在套接字上停留多长时间?

如果数据被发送到客户端但客户端正在忙于执行其他操作,那么使用recvfrom()读取数据可以使用多长时间?

此外,如果在读取第一个数据包之前发送第二个数据包会发生什么情况,第一个数据包是丢失的还是下一个数据包正在等待读取?

(windows - udp)

c sockets windows winapi winsock

15
推荐指数
3
解决办法
1万
查看次数

<winsock.h>和<winsock2.h>之间有区别吗?

我包含了MySQL C库所要求的内容.

VS2010中的自动完成也显示出 - 任何想法是什么?

它们是否可以互换,是否有任何优势?

谢谢!

c++ winsock

15
推荐指数
2
解决办法
2万
查看次数

在窗户中替代分叉

我一直在关注Beej Networking指南,在服务器部分,有一部分代码叫做函数fork().

if (!fork()) { // this is the child process
            close(sockfd); // child doesn't need the listener
            if (send(new_fd, "Hello, world!", 13, 0) == -1)
                perror("send");
            close(new_fd);
            exit(0);
Run Code Online (Sandbox Code Playgroud)

我在Windows机器上,不能让那部分工作.我能做些什么来解决这个问题?我的代码如下.

/* Server */
#define _WIN32_WINNT 0x501
#include <iostream>
#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>
#include  <sys/types.h>


using namespace std;

const int winsockVersion = 2;
#define BACKLOG 10
#define PORT "3000"


int main(void){

    WSADATA wsadata;
    if (WSAStartup(MAKEWORD(winsockVersion,0),&wsadata) == 0){
        cout<<"-WSAStartup initialized..." << endl;

        int status;
        int sockfd, …
Run Code Online (Sandbox Code Playgroud)

c++ winapi gcc fork winsock

13
推荐指数
3
解决办法
2万
查看次数