标签: winsock

为什么Microsoft以不同的方式实现套接字?

我目前正处于涉及套接字的项目中,我只使用Linux的sys/socket.h文件.提示微软的端口,并意识到Winsock是不同的.我想我有两个问题.

首先,两种实现之间的主要区别是什么?是否有一种"翻译"它们的简单方法?我们非常感谢指南的链接,因为你们可能会给我提供比谷歌更优质的链接.

第二,为什么微软这样做?他们的动机是什么?为什么他们不像其他人一样保持相同的实施?

sockets networking winsock

8
推荐指数
2
解决办法
7047
查看次数

无法在Windows上创建套接字

我有一个非常尴尬的问题.以下代码不会在Windows上创建套接字; 它失败并显示错误消息.任何人都可以简单解释为什么会这样吗?如此简单的失败让我感到非常困惑和沮丧.谢谢.

int sock;
if( (sock = socket(AF_INET, SOCK_STREAM, 0)) < 0 )
{
    printf("error opening socket");
}
Run Code Online (Sandbox Code Playgroud)

编辑:此外,打印输出strerror(错误)只显示"没有错误".

c sockets networking winsock

8
推荐指数
2
解决办法
5120
查看次数

适用于C的HTTP POST/GET的轻量级库?

我打算为Windows中的音乐播放器创建一个Last.FM scrobbler插件.Last.FM提交API在HTTP/1.1 GET和POST上进行中继.

我从来没有完成面向Internet的编程,我仍然知道HTTP协议,但我想开始玩它发送和获取一些数据.我看过Winsock界面,但我不知道使用任何更简单的东西是否更好.

你们谁都知道我怎么能这样做?我能用什么?

如果是这样,你能指点我一个教程吗?

如果它是一个库,我可以静态链接到它,我想只提供插件的DLL.

c sockets http winsock

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

C++ - 初始化SOCKADDR_IN

我正在处理一些静态分析缺陷,并且导致我出现问题的是这个缺陷.

SOCKADDR_IN m_stLclAddr;
Run Code Online (Sandbox Code Playgroud)

SOCKADDR_IN是WinSock API的成员

缺陷是说我没有初始化以下内容:

  • m_stLclAddr.sin_port
  • m_stLclAddr.sin_zero
  • m_stLclAddr.sin_addr
  • m_stLclAddr.sin_family

我对熟悉WinSock API并不是很熟悉,但我做了一些研究,我只是想知道以下代码行是否会使用默认值初始化m_stLclAddr?

m_stLclAddr = { 0 };
Run Code Online (Sandbox Code Playgroud)

c++ initialization winsock

8
推荐指数
1
解决办法
8114
查看次数

C - 对WSAStartup @ 8'的未定义引用

我正在使用Code :: Blocks,MinGW和Windows.我试图初始化winsock,以便我可以在项目上工作.我一直在收到错误Undefined Reference to WSAStartup@8任何人都知道如何解决这个问题?

#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>

#pragma comment(lib,"ws2_32.lib")

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

    output=WSAStartup(MAKEWORD(2,2),&wsa);
    if(output != 0) {
        printf("Startup failed %d\n", output);
        return 1;
    } else {
        printf("Initialized");
        return 0;
    }

}
Run Code Online (Sandbox Code Playgroud)

c mingw winsock codeblocks wsastartup

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

套接字异常:"端点映射器没有更多端点可用"

我正在使用winsock和C++来设置服务器应用程序.我遇到的问题是调用listen导致第一次机会异常.我猜通常这些可以被忽略(?)但是我发现其他人有同样的问题我在哪里导致应用程序偶尔挂起一次.任何帮助将不胜感激.

第一次机会例外是:

MyApp .exe 中0x*12345678*的第一次机会异常:0x000006D9:端点映射器不再提供端点.

我发现一些证据表明这可能是由socket引起的.我正在使用的代码如下所示.listen从底部调用第五行时发生异常.

  m_accept_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

  if (m_accept_fd == INVALID_SOCKET)
  {
    return false;
  }

  int optval = 1;

  if (setsockopt (m_accept_fd, SOL_SOCKET, SO_REUSEADDR,
                  (char*)&optval, sizeof(optval)))
  {
    closesocket(m_accept_fd);
    m_accept_fd = INVALID_SOCKET;
    return false;
  }

  struct sockaddr_in  local_addr;
  local_addr.sin_family = AF_INET;
  local_addr.sin_addr.s_addr = INADDR_ANY;
  local_addr.sin_port = htons(m_port);

  if (bind(m_accept_fd, (struct sockaddr *)&local_addr,
           sizeof(struct sockaddr_in)) == SOCKET_ERROR)
  {
    closesocket(m_accept_fd);
    return false;
  }

  if (listen (m_accept_fd, 5) == SOCKET_ERROR)
  {
    closesocket(m_accept_fd);
    return false;
  }
Run Code Online (Sandbox Code Playgroud)

c++ sockets rpc exception winsock

7
推荐指数
1
解决办法
9489
查看次数

如何在WinSock中使用OpenSSL?

我在网上搜索过,但没找到任何东西......

有没有人有一个使用WinSock和OpenSSL的简单代码示例?我正在寻找一个简单的Visual C++ 2005或更高代码示例,它创建并打开winsock连接并使用OpenSSL应用必要的SSL设置并适当地释放所有资源.

ssl openssl winsock

7
推荐指数
1
解决办法
6663
查看次数

正常关闭TCP套接字

我正在用C++编写一个IRC客户端,目前我遇到了一个问题,退出后,我做了:

Send("QUIT :Quit\r\n"); // just an inline, variadic send() wrapper
shutdown(m_hSocket, SD_BOTH);
closesocket(m_hSocket);

WSAShutdown();

但是,问题是没有发送QUIT消息.我嗅到了来自客户端的数据包,实际上这条消息从未发送过.我认为这是套接字没有被刷新的问题,但我不知道如何做到这一点,谷歌建议禁用Nagle算法,但我怀疑这是一个好习惯.

提前致谢.

c++ sockets irc tcp winsock

7
推荐指数
1
解决办法
6664
查看次数

内存泄漏GETIPFROMHOST

我在这里有这个代码来从主机名中检索IP地址:

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  winsock;

function GetIPFromHost(const HostName: string): string;
type
  TaPInAddr = array[0..10] of PInAddr;
  PaPInAddr = ^TaPInAddr;
var
  phe: PHostEnt;
  pptr: PaPInAddr;
  i: Integer;
begin
  Result := '';
  phe := GetHostByName(PChar(HostName));
  if phe = nil then Exit;
  pPtr := PaPInAddr(phe^.h_addr_list);
  i := 0;
  while pPtr^[i] <> nil do
  begin
    Result := inet_ntoa(pptr^[i]^);
    Inc(i);
  end;
end;

var
wsaData: TWSAData;

begin

if (WSAStartup($0202, wsaData) <> 0) then begin
      Exit;
end;

while true do begin
sleep (1000);
GetIPFromHost …
Run Code Online (Sandbox Code Playgroud)

delphi memory-leaks winsock delphi-7 winsock2

7
推荐指数
1
解决办法
1066
查看次数

客户端/服务器通信中的中间件

我正在用C++构建一个客户端/服务器对,我用它winsock来进行通信.但是,我无法在C++中找到任何可以实现某些内容的库,而不是直接从客户端向服务器发送请求,而是存储请求,稍后将与服务器进行通信.

有没有任何方法或库可以将请求发送到像经纪人这样的东西,反之亦然?将存储请求的东西,然后将与服务器通信.这些是我已经使用的库:

#pragma comment( linker, "/defaultlib:ws2_32.lib")
#include <WinSock2.h>
#include <winsock.h>
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <windows.h>
#include <ws2tcpip.h>
#include <fstream>
using namespace std;

#define HOSTNAME_LENGTH 20
#define RESP_LENGTH 40
#define FILENAME_LENGTH 20
#define REQUEST_PORT 5001
#define BUFFER_LENGTH 1024 
#define TRACE 0
#define MSGHDRSIZE 8 //Message Header Size
Run Code Online (Sandbox Code Playgroud)

client-server winsock visual-c++ broker

7
推荐指数
1
解决办法
616
查看次数