我是socket编程的新手。我正在用C ++创建一个客户端套接字,我的朋友正在制作一个服务器端套接字(也是用C ++),我们的目标是一起创建一个聊天应用程序。作为socket编程的新手,我在C ++ socket和相关的网上搜索,我收集了足够的信息来制作套接字并将内容发送到另一个套接字。问题出在send
和connect
函数上。我真的不明白我应该在哪些参数,以及如何初始化它们。我希望有经验的人可以解释他们的工作方式,以及用作参数的值。这是MSDN的代码示例。我希望有人帮忙!无论如何,谢谢!
int send(
_In_ SOCKET s,
_In_ const char *buf,
_In_ int len,
_In_ int flags
);
int connect(
_In_ SOCKET s,
_In_ const struct sockaddr *name,
_In_ int namelen
);
我已经知道如何创建一个套接字,所以我知道第一个参数是什么;这是插座。
编辑2:
这些是我使用的模块;我不确定他们是否应该使用;我只是从我在网上看到的C ++套接字示例中复制它们。
#include<iostream> //cout
#include<stdio.h> //printf
#include<string.h> //strlen
#include<string> //string
#include<sys/socket.h> //socket
#include<arpa/inet.h> //inet_addr
#include<netdb.h> //hostent
还有一件事 - 我正在使用UDP协议。不确定这是否会影响任何事情,谢谢!
答案 0 :(得分:0)
这是Windows的最小套接字客户端。它连接到Google并发出GET请求并转储结果。 YMMV。
#include <winsock2.h>
#include <WS2tcpip.h>
int ResolveHostName(const char* pszHostName, sockaddr_in* pAddr)
{
int ret;
HRESULT hr = S_OK;
addrinfo* pResultList = NULL;
addrinfo hints = {};
int result = -1;
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
ret = getaddrinfo(pszHostName, NULL, &hints, &pResultList);
result = (ret == 0) ? 1 : -1;
if (result != -1)
{
// just pick the first one found
*pAddr = *(sockaddr_in*)(pResultList->ai_addr);
result = 0;
}
if (pResultList != NULL)
{
::freeaddrinfo(pResultList);
}
return result;
}
int main()
{
SOCKET sock = -1;
WSADATA data = {};
sockaddr_in addrRemote = {};
int result;
WSAStartup(MAKEWORD(2, 2), &data);
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock != -1)
{
if (ResolveHostName("www.google.com", &addrRemote) != -1)
{
addrRemote.sin_port = htons(80);
result = connect(sock, (sockaddr*)&addrRemote, sizeof(addrRemote));
if (result != -1)
{
char* msg = "GET / HTTP/1.1\r\nHost: www.google.com\r\nConnection: close\r\n\r\n";
int msg_len = strlen(msg);
result = send(sock, msg, msg_len, 0);
if (result != -1)
{
char szBuffer[10000+1];
result = recv(sock, szBuffer, 10000, 0);
if (result > 0)
{
// safely null terminate
szBuffer[result] = '\0';
printf("%s\n", szBuffer);
}
}
}
}
}
if (sock != -1)
{
closesocket(sock);
sock = -1;
}
return 0;
}