VC++中关于SOCKET的问题

2025-05-11 03:43:26
推荐回答(3个)
回答(1):

给你两个例子。一个是客户端,一个是服务端。
整个例子是C/S模式。
-------------------------------------------------------
//Client端
#include
#include
#pragma comment(lib, "ws2_32.lib ")
void main()
{
WORD wVersionRequested; //定义一个版本变量,VERSION代表的是指定的WINSOCK版本。
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return;
}

if (LOBYTE(wsaData.wVersion) !=1 || HIBYTE(wsaData.wVersion)!=1)
{
WSACleanup( );
return;
}
SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);

SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr( "192.168.0.5 ");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

char recvBuf[100];
recv(sockClient,recvBuf,100,0);
printf( "%s\n ",recvBuf);
send(sockClient, "用什么英文啊,要学习中国话!! ",strlen( "用什么英文啊,要学习中国话!! ")+1,0);

closesocket(sockClient);
WSACleanup();
}

----------------------------------------------------------

//Server端
#include
#include
#pragma comment(lib, "ws2_32.lib ")

void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return;
}

if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) {
WSACleanup( );
return;
}
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);

SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET; //家族值取AF_INET
addrSrv.sin_port=htons(6000);//端口为6000
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); //绑定
//开始监听
listen(sockSrv,5); //5为连接最大数

SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);

while(1)
{
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
char sendBuf[100];
sprintf(sendBuf, "哈哈哈哈哈,中国人最牛B~~~ ",
inet_ntoa(addrClient.sin_addr));
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
char recvBuf[100];
recv(sockConn,recvBuf,100,0);
printf( "%s\n ",recvBuf);
closesocket(sockConn);
}
}

以上两个端请分别做成两个项目文件,分开运行。
运行顺序,先运行SERVER端,然后再运行CLIENT端,每运行一次CLIENT端会发送一次"用什么英文啊,要学习中国话!! "这个字符串到你的SERVER端,SERVER端则返回给客户端"哈哈哈哈哈,中国人最牛B~~~ ",这样一个字符串,把你做的结果写到一个字符串中,然后发送就可以了。很简单。

以上代码在WIN2003系统,VS2008环境下调试成功,自己写的代码,希望对你一样受用。
加油。

回答(2):

如果你是希望学习有关socket编程的问题的话,强烈建议你自己研究学习这部分内容,socket编程是网络编程的很重要的组成部分,通过socket编程的研究可以了解TCP/IP的连接建立和数据传送的过程,在此基础上才有可能很好的写出网络程序,具体学习上,我可以提供给你一些相关的资料、PPT之类,写得很详细,只要对网络有一丁点知识,学习1个小时左右差不多OK能自己写出一个像楼上那样的程序,留邮箱

回答(3):

msdn