大家看看是杂回事,我没经验/*
  客户端程序
  ***************************************************************************************************
  调试环境: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");
}

解决方案 »

  1.   

    你是自己直接编译还是在CMD下面输入参数
    if(argc<2)
    {
    //提示在命令行中输入IP地址
    printf("Usage:client[server IP address]\n");
    return ;
    }
    因为假如你要是直接编译,当然会直接返回了~~
    它执行了上面这条语句,就立即返回,根本不会执行到下面~~~
    所以,你在下面添加system("pause");是没有用的~~~
      

  2.   

    我是直接编译我刚才在cmd里面试了一下
    可以了,跟例子一样的!不过有没有办法让直接编译时不让返回!
    去了那个:return这样:
    if(argc<2)
    {
    //提示在命令行中输入IP地址
    printf("Usage:client[server IP address]\n");
    //return ;
    }行不行?
      

  3.   

    程序里所有return ;的地方都注释掉,或者换成goto语句
      

  4.   

    #include <conio.h>用getch()这个函数,当任意键后继续...