读书人

简单的Scoket通信如何扩展到任意两台主

发布时间: 2014-05-30 17:21:02 作者: rapoo

简单的Scoket通信怎么扩展到任意两台主机上
本帖最后由 I_will_back 于 2013-07-12 11:54:23 编辑
server端

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

#pragma comment(lib, "WS2_32")

int main()
{
WSADATA wsadata;
if (WSAStartup(MAKEWORD(2, 2), &wsadata) != 0)
printf("初始化失败\n");


SOCKET s = socket(AF_INET, SOCK_STREAM, 0);
if (s == INVALID_SOCKET)
printf("套接字初始化失败\n");

printf("服务器已启动....\n");

intiPort = 6000;
//char buf[] = "这是一条发给客户端的消息";
char buf[1024];
memset(buf, 0, 1024);

//服务器套接字
sockaddr_in ser;
ser.sin_family = AF_INET;
ser.sin_port = htons(iPort);
ser.sin_addr.s_addr = htonl(INADDR_ANY);

if (bind(s, (SOCKADDR*)&ser, sizeof(sockaddr_in)) == SOCKET_ERROR)
{
printf("绑定失败\n");
}

if (listen(s, 2) == SOCKET_ERROR)
{
printf("监听失败\n");
}

//接受客户端请求
sockaddr_in cli;
int iLen = sizeof(cli);
SOCKET sAccept = accept(s, (SOCKADDR*)&cli, &iLen);
if ( sAccept == INVALID_SOCKET)
{
printf("接受失败\n");
}
printf("已连接\n");
while (1)
{
scanf("%s", buf);
if (send(sAccept, buf, sizeof(buf), 0) == SOCKET_ERROR)
break;
}

closesocket(s);
closesocket(sAccept);
WSACleanup();
system("pause");
return 0;
}


client端


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

#pragma comment(lib, "WS2_32")

int main()
{
WSADATA wsadata;
if (WSAStartup(MAKEWORD(2, 2), &wsadata) != 0)
{
printf("初始化失败\n");
}

SOCKET client;
sockaddr_in ser;
int iPort = 6000;
char buf[512];
memset(buf, 0, 512);

client = socket(AF_INET, SOCK_STREAM, 0);

if (client == INVALID_SOCKET)
{
printf("套接字初始化失败\n");
}

ser.sin_family = AF_INET;
ser.sin_port = htons(iPort);
ser.sin_addr.s_addr = inet_addr("127.0.0.1");

int len = connect(client, (sockaddr*)&ser, sizeof(ser));
if (len == SOCKET_ERROR)
{
printf("连接服务器失败\n");
}
while (1)
{
if (recv(client, buf, sizeof(buf), 0) == SOCKET_ERROR)
break;
printf("%s\n", buf);
}
closesocket(client);
WSACleanup();
system("pause");
return 0;

}

这是一个服务端和客户端,在统一电脑上能通信,我就想问问,怎么让他自动区分主机的IP,在任意两台电脑上都能通信,就想QQ一样,ser.sin_addr.s_addr = inet_addr("127.0.0.1");这里应该要怎么改啊。
[解决办法]
服务端的ip地址需要让客户端知道,这样客户端才能去连
[解决办法]
客户端必须知道服务器的ip才能连上 你这里客户端可以放其他机子上 只要ser.sin_addr.s_addr = inet_addr("127.0.0.1");这里的ip填服务器的ip (如果要过路由还需要做端口映射...)

读书人网 >VC/MFC

热点推荐