• 全部
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

帮我看看这段SOCKETS!!

xiaorou00 2002-05-10 08:28:41
我从网上找了一段SOCKET 的程序可是只有服务器端的没有客户端的 那位朋友帮我写一个

我主要的问题就是 : 1 填充SOCKET时ADDR PORT 是服务器的还是我的
2 CONNECTION 的用法
3 send 的用法



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

#define SERVER_PORT 5000

void main()
{
char Server_name[128]={65};

WSADATA wsaData;
SOCKET socketServer;
struct hostent *hp;
struct sockaddr_in addrServer;

SOCKADDR addrtemp;int nlen = sizeof(addrtemp);
SOCKET sockettemp;

char buff[1024];int bufflen;

WSAStartup(0x202,&wsaData); //初始化Winsock资源
socketServer = socket(AF_INET,SOCK_STREAM,0); //建立套接字
//AF_INET:TCP/IP地址族
//SOCK_STREAM:数据流方式
gethostname(Server_name,128); //获取机器的名称
hp = gethostbyname(Server_name); //通过机器名称获取主机的信息

//初始化sockaddr_in结构
//包括IP地址sin_addr、协议族sinfamily和使用的端口sin_port
memset(&addrServer,0,sizeof(addrServer));
memcpy(&(addrServer.sin_addr),hp->h_addr,hp->h_length);
addrServer.sin_family = AF_INET;
addrServer.sin_port = htons((unsigned short)SERVER_PORT);

if(SOCKET_ERROR == bind(socketServer,(LPSOCKADDR)&addrServer,sizeof(addrServer)))
{
printf("Bind Socket Error ! \r\n");
return;
}
else
{
printf("Bind Socket Success . . .\r\n");
printf("---------------------------------------------\r\n");
printf("This machine's name is -> %s\r\n",Server_name);
printf("This machine's IP address is -> %d.%d.%d.%d\r\n",
*(BYTE*)&(addrServer.sin_addr),
*((BYTE*)&(addrServer.sin_addr)+1),
*((BYTE*)&(addrServer.sin_addr)+2),
*((BYTE*)&(addrServer.sin_addr)+3));
printf(" Recieve Port is -> %d\r\n",SERVER_PORT);
}

listen(socketServer,5); //在socketServer上监听连接信息
printf("---------------------------------------------\r\n");
printf("Wait for a connection . . .\r\n");

ZeroMemory((void*)&addrtemp,sizeof(addrtemp));
nlen = sizeof(addrtemp);
sockettemp = accept(socketServer,&addrtemp,&nlen); //接受连接请求并生成专用的接收socket
bufflen = recv(sockettemp,buff,1023,0); //接受信息
memset(buff+bufflen,0,1);
printf("Message Recieved: [%s]\r\n",buff);
printf("Press any key to continue . . .");
scanf("%c");
closesocket(sockettemp);

closesocket(socketServer);
WSACleanup();
return;
}
...全文
11 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zhabj925 2002-05-30
bufflen = send(sockettemp,buff,1023,0); //发送信息
回复
xiaorou00 2002-05-10
还有不明白的地方
1 客户端 是填充本机的IP 地址 还是填充服务器的IP 和端口
2 SEND 的用法!!

if(connect(desc_sock, (struct sockaddr FAR *)&desc_sin, sizeof(desc_sin)) < 0)
{
closesocket(desc_sock);
sprintf(err_msg, "ERROR: Connect Function ERROR !!!");
LOG_ERR(err_msg);
return FALSE;
}
为什么总是是假??
回复
xiaorou00 2002-05-10
if(connect(desc_sock, (struct sockaddr FAR *)&desc_sin, sizeof(desc_sin)) < 0)
{
closesocket(desc_sock);
sprintf(err_msg, "ERROR: Connect Function ERROR !!!");
LOG_ERR(err_msg);
return FALSE;
}
为什么总是<0
回复
xiaorou00 2002-05-10
还有不明白的地方
1 客户端 是填充本机的IP 地址 还是填充服务器的IP 和端口
2 SEND 的用法!!

if(connect(desc_sock, (struct sockaddr FAR *)&desc_sin, sizeof(desc_sin)) < 0)
{
closesocket(desc_sock);
sprintf(err_msg, "ERROR: Connect Function ERROR !!!");
LOG_ERR(err_msg);
return FALSE;
}
为什么总是
回复
xuying 2002-05-10
你可以直接用telnet连接到服务器上。
telnet server_ip 5000
然后输入一些数据就可以了。
回复
summerw 2002-05-10
#include <winsock2.h>
#include <stdio.h>


void main()
{
WSADATA wsd;
SOCKET sClient;
struct sockaddr_in server;

char sMessage[] = "This is a test,Server!";
int ret;

if(WSAStartup(MAKEWORD(2,2),&wsd) != 0)
{
printf("Failed to load Winsock Library!\n");
return ;
}

sClient = socket(AF_INET,SOCK_STREAM,0);
if(sClient == INVALID_SOCKET)
{
printf("socket() failed:%d\n",WSAGetLastError());
return ;
}

server.sin_family = AF_INET;
server.sin_port = htons(5000);
server.sin_addr.s_addr = inet_addr("10.11.12.3");//改为服务器的IP地址

if(connect(sClient,(struct sockaddr*)&server,sizeof(server)) == SOCKET_ERROR)
{
printf("connect() failed:%d\n",WSAGetLastError());
return ;
}

ret = send(sClient,sMessage,sizeof(sMessage),0);

if(ret == SOCKET_ERROR)
{
printf("send() failed : %d\n",WSAGetLastError());
return ;
}

printf("Success! Press any key to continue......!\n");
getchar();

closesocket(sClient);

WSACleanup();
return ;
}
回复
xiaorou00 2002-05-10
谢谢你我测试一下 !!
回复
wumugulu 2002-05-10
忘了说明了,g_ismg_host是CString, g_ismg_host = "192.2.168.0.1";
g_ismg_port是int, g_ismg_port = 6666;
回复
wumugulu 2002-05-10
SOCKADDR_IN desc_sin; // Accept socket address - internet style
SOCKET desc_sock; // Accept socket
int err_code;
char err_msg[128];

if ((desc_sock=socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
{
sprintf(err_msg, "ERROR: Socket Function Failed !!!");
LOG_ERR(err_msg);
return FALSE;
}

memset((char *)&desc_sin, 0, sizeof(desc_sin));
desc_sin.sin_family = AF_INET;
desc_sin.sin_addr.s_addr = inet_addr(g_ismg_host);
desc_sin.sin_port = htons(g_ismg_port);

if(connect(desc_sock, (struct sockaddr FAR *)&desc_sin, sizeof(desc_sin)) < 0)
{
closesocket(desc_sock);
sprintf(err_msg, "ERROR: Connect Function ERROR !!!");
LOG_ERR(err_msg);
return FALSE;
}

send(desc_sock, .........);

return TRUE;
回复
xiaorou00 2002-05-10
HELP
回复
xiaorou00 2002-05-10
send ??用法?
回复
wycwhy 2002-05-10
客户端要填充服务器端的IP
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2002-05-10 08:28
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……