VC++中关于SOCKET的问题

我是一个初学者,师傅给我一个题目让我做,是要完成一个加减乘除的计算器,然后将计算结果利用SOCKET发送出去,并且存储能够存储下来,计算器和存储功能我都完成了,但SOCK... 我是一个初学者,师傅给我一个题目让我做,是要完成一个加减乘除的计算器,然后将计算结果利用SOCKET发送出去,并且存储能够存储下来,计算器和存储功能我都完成了,但SOCKET发送我始终不会,求高手给解~~~
我的邮箱liangno@sina.com,有资料的大侠借我看看啊,前段时间有事情,一直没时间做
展开
 我来答
sg_bboys
推荐于2016-10-14 · TA获得超过125个赞
知道小有建树答主
回答量:100
采纳率:0%
帮助的人:115万
展开全部
给你两个例子。一个是客户端,一个是服务端。
整个例子是C/S模式。
-------------------------------------------------------
//Client端
#include <Winsock2.h>
#include <stdio.h>
#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 <Winsock2.h>
#include <stdio.h>
#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环境下调试成功,自己写的代码,希望对你一样受用。
加油。
soilworm
2010-04-22 · 超过10用户采纳过TA的回答
知道答主
回答量:30
采纳率:0%
帮助的人:0
展开全部
如果你是希望学习有关socket编程的问题的话,强烈建议你自己研究学习这部分内容,socket编程是网络编程的很重要的组成部分,通过socket编程的研究可以了解TCP/IP的连接建立和数据传送的过程,在此基础上才有可能很好的写出网络程序,具体学习上,我可以提供给你一些相关的资料、PPT之类,写得很详细,只要对网络有一丁点知识,学习1个小时左右差不多OK能自己写出一个像楼上那样的程序,留邮箱
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
guoke204
2010-04-09 · 贡献了超过101个回答
知道答主
回答量:101
采纳率:0%
帮助的人:39万
展开全部
msdn
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式