【发布时间】:2015-07-10 19:25:56
【问题描述】:
您好,我是套接字编程的新手。我目前正在为客户端(即我的计算机)编写 c 代码,以向本地主机 127.0.0.1 发送一些内容,并查看本地主机是否收到请求并返回任何内容。我已经可以连接到本地主机,但我不知道我使用什么命令来测试我是否可以与本地主机交谈。
#include<stdio.h>
#include<winsock2.h>
#pragma comment(lib, "ws2_32.lib") //Winsock Library
int main(int argc, char *argv[])
{
WSADATA wsa;
SOCKET s;
struct sockaddr_in server;
char *message , server_reply[2000];
int recv_size;
printf("\nInitialising Winsock...");
if (WSAStartup(MAKEWORD(2,2), &wsa) != 0)
{
printf("Failed. Error Code : %d", WSAGetLastError());
return 1;
}
printf("Initialised.\n");
//Create a socket
if((s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET)
{
printf("Could not create socket : %d\n", WSAGetLastError());
return 1;
}
printf("Socket created.\n");
//server.sin_addr.s_addr = 127.0.0.1;
//server.sin_addr.s_addr = inet_addr("74.125.224.72"); //google IP address
server.sin_addr.s_addr = inet_addr("127.0.0.1"); //local host IP
server.sin_family = AF_INET;
//server.sin_port = htons(80);//IIS port
server.sin_port = htons(60441); //local port
//server.sin_port = 80;
//Connect to remote server
if (connect(s, (struct sockaddr *)&server, sizeof(server)) < 0)
{
printf("connect error:%d\n", WSAGetLastError());
closesocket(s);
WSACleanup();
system("pause");
return 1;
}
puts("Connected\n");
closesocket(s);
WSACleanup();
system("pause");
return 0;
}
【问题讨论】:
-
您的客户端连接到什么样的服务器?你不能盲目地向它发送命令,而不知道它实际期望什么样的命令,它们使用什么格式等。
-
它看起来很适合实际上不交流任何东西的东西:(
-
什么服务器正在监听 127.0.0.1:60441 ?你一定有什么想法吧?
-
如我所说,到目前为止我只完成了连接。是的,这不是交流原因,这就是我发布这个问题的原因。
-
再一次,你必须知道你连接到什么样的服务器才能与之通信。如果您只是向它发送随机数据,服务器将要么 1)忽略您,2)断开您的连接,3)等待您发送正确的数据,或者 4)可能完全崩溃。与其连接到某个未知的服务器,不如创建自己的服务器进行测试?