大家看看是杂回事,我没经验/*
客户端程序
***************************************************************************************************
调试环境:VC.net
程序名称:client.cpp
客户IP地址和端口:由系统指定
程序功能:客户端程序向服务器提出tcp连接请求,当连接建立后,从服务器端口5050接收数据并进行显示,
然后断开与服务器的连接.
命令格式:client[服务器ip地址]
命令举例:client 192.168.0.1
说明:....................
*******************************************************************************************************
*/
#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")//服务器端口号为5050
#define DEFAULT_PORT 5050
#define DATA_BUFFER 1024
void main(int argc,char *argv[])
{
WSADATA wsaData;
SOCKET sClient;
int iPort=DEFAULT_PORT;
//从服务器端接收的数据长度
int iLen;
//接收数据的缓冲
char buf[DATA_BUFFER];
//服务器端地址
struct sockaddr_in ser;
//看输入的参数是否正确
if(argc<2)
{
//提示在命令行中输入IP地址
printf("Usage:client[server IP address]\n");
return ;
}
//接收数据缓冲区初始化
memset(buf,0,sizeof(buf));
//检查系统协议的安装,并调用socket
if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)
{
printf("Failed to load winsock,\n");
return ;
}
//填写要连接的服务器的信息地址
ser.sin_family=AF_INET;
ser.sin_port=htons(iPort);
//inet_addr()函数把命令行的点分ip地址转化为用二进制表示的网络字节顺序中的ip地址
ser.sin_addr.s_addr=inet_addr(argv[1]); //建立客户端流式接口
sClient=socket(AF_INET,SOCK_STREAM,0);
if(sClient==INVALID_SOCKET)
{
printf("socket() Falied:%d\n",WSAGetLastError());
return ;
}
//请求与服务器端建立连接
if(connect(sClient,(struct sockaddr*)&ser,sizeof(ser))==INVALID_SOCKET)
{
printf("connect Failed:%d\n",WSAGetLastError());
return ;
}
else
{
//从服务器端接收数据
iLen=recv(sClient,buf,sizeof(buf),0);
if(iLen==0)
return ;
else if(iLen==SOCKET_ERROR)
{
printf("recv Failed:%d\n",WSAGetLastError());
return ;
}
printf("recv() data from server:%s\n",buf);
}
closesocket(sClient);
WSACleanup();
system("pause");
}
客户端程序
***************************************************************************************************
调试环境:VC.net
程序名称:client.cpp
客户IP地址和端口:由系统指定
程序功能:客户端程序向服务器提出tcp连接请求,当连接建立后,从服务器端口5050接收数据并进行显示,
然后断开与服务器的连接.
命令格式:client[服务器ip地址]
命令举例:client 192.168.0.1
说明:....................
*******************************************************************************************************
*/
#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")//服务器端口号为5050
#define DEFAULT_PORT 5050
#define DATA_BUFFER 1024
void main(int argc,char *argv[])
{
WSADATA wsaData;
SOCKET sClient;
int iPort=DEFAULT_PORT;
//从服务器端接收的数据长度
int iLen;
//接收数据的缓冲
char buf[DATA_BUFFER];
//服务器端地址
struct sockaddr_in ser;
//看输入的参数是否正确
if(argc<2)
{
//提示在命令行中输入IP地址
printf("Usage:client[server IP address]\n");
return ;
}
//接收数据缓冲区初始化
memset(buf,0,sizeof(buf));
//检查系统协议的安装,并调用socket
if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)
{
printf("Failed to load winsock,\n");
return ;
}
//填写要连接的服务器的信息地址
ser.sin_family=AF_INET;
ser.sin_port=htons(iPort);
//inet_addr()函数把命令行的点分ip地址转化为用二进制表示的网络字节顺序中的ip地址
ser.sin_addr.s_addr=inet_addr(argv[1]); //建立客户端流式接口
sClient=socket(AF_INET,SOCK_STREAM,0);
if(sClient==INVALID_SOCKET)
{
printf("socket() Falied:%d\n",WSAGetLastError());
return ;
}
//请求与服务器端建立连接
if(connect(sClient,(struct sockaddr*)&ser,sizeof(ser))==INVALID_SOCKET)
{
printf("connect Failed:%d\n",WSAGetLastError());
return ;
}
else
{
//从服务器端接收数据
iLen=recv(sClient,buf,sizeof(buf),0);
if(iLen==0)
return ;
else if(iLen==SOCKET_ERROR)
{
printf("recv Failed:%d\n",WSAGetLastError());
return ;
}
printf("recv() data from server:%s\n",buf);
}
closesocket(sClient);
WSACleanup();
system("pause");
}
解决方案 »
- 2005 和 1169的错误/vc6.0代码移植到vs2010中出现的错误?
- 对话框ID的小问题
- 用textout输出字体时如何让输出字体跟richtextbox的字体相一致
- 我发现spy++不能查看工具栏上的按钮哦~~ 有什么办法可以实现吗?如果要查看,编程原理是什么?
- 如何在对话框插入位图?
- 关于ShellExecute()函数,它能不能直接打开网络机器上的文件呢?
- 来者有分!能解决问题的另加 100 分!怎么做一个98和2000都能用的中断服务程序?
- 送分喽!!!!关于 CFileDialog的问题!
- vs 2012 数据类型转化
- CWnd的GetDlgCtrlID()和GetDlgItem()应该可以完成相同的工作呀,可是……
- 关于文件管理的问题
- 缺少util.h 文件 vs2003 编译器没有 vc6 里面有 怎么解决?
if(argc<2)
{
//提示在命令行中输入IP地址
printf("Usage:client[server IP address]\n");
return ;
}
因为假如你要是直接编译,当然会直接返回了~~
它执行了上面这条语句,就立即返回,根本不会执行到下面~~~
所以,你在下面添加system("pause");是没有用的~~~
可以了,跟例子一样的!不过有没有办法让直接编译时不让返回!
去了那个:return这样:
if(argc<2)
{
//提示在命令行中输入IP地址
printf("Usage:client[server IP address]\n");
//return ;
}行不行?