建立TCP/IP连接,该如何解决

建立TCP/IP连接
刚接触这部分内容 照着书做的 大致了解了一下 但是程序运行的时候服务器端始终无法收到用户端的请求 劳烦老手帮忙看一下 稍加讲解.... 感谢!

这是用户端
C/C++ code

#pragma comment(lib,"wsock32.lib")
#include <stdio.h>
#include <WinSock2.h>

unsigned short port;
char *hostname;

int initsockets();
void getargument(int argc,char** argv);
void errorprint(char* x);
void userhelp();

int main(int argc,char** argv)
{
    SOCKET clientfd;
    int err;
    struct sockaddr_in serveraddr;
    struct hostent* ptrhost;
    char response[4096];
    char *msg="HELLO SERVER";
    if(argc!=3)
    {
        userhelp();
        return 1;
    }

    getargument(argc,argv);

    initsockets();

    //创建套接字
    clientfd=socket(AF_INET,SOCK_STREAM,0);

    //创建失败
    if(clientfd==INVALID_SOCKET)
    {
        errorprint("no more socket resources");
        return 1;
    }

    //解析地址
    if(atoi(hostname))
    {
        u_long ip_addr=inet_addr(hostname);
        ptrhost=gethostbyaddr((char*)&ip_addr,sizeof(u_long),AF_INET);
    }
    else
        ptrhost=gethostbyname(hostname);
    if(!ptrhost)
    {
        errorprint("cannot resolve hostname");
        return 1;
    }

    //设置服务器端地址选项
    serveraddr.sin_family=AF_INET;
    //将本机地址复制给服务器端地址
    memcpy((char*)&(serveraddr.sin_addr),ptrhost->h_addr_list,ptrhost->h_length);

    serveraddr.sin_port=htons(port);//将一个无符号短整型数值转换为网络字节序,即大端模式(big-endian)
    //连接服务器
    err=connect(clientfd,(struct sockaddr *)&serveraddr,sizeof(serveraddr));

    //连接失败
    if(err=INVALID_SOCKET)
    {
        errorprint("cannot connect to server");
        return 1;
    }
    //连接成功后输出信息
    printf("You are connected to the server \n");
    //发送消息到服务器端
    send(clientfd,msg,strlen(msg)+1,0);
    memset(response,0,sizeof(response));
    //接收来自服务器端的消息
    recv(clientfd,msg,strlen(msg)+1,0);
    printf("server says %s\n",response);
    //关闭套接字
    closesocket(clientfd);
    //释放winsocket初始化时占用的资源
    WSACleanup();
    return 0;
}
int initsockets()
{
    WSADATA wsadata;
    WORD sockversion;
    int err;

    sockversion=MAKEWORD(2,2);

    err=WSAStartup(sockversion,&wsadata);

    if(err!=0)
    {
        printf("Error %d : Winsock not available \n", err);
        return 1;
    }
    return 0;
}
void getargument(int argc,char**argv)
{
    int i;
    for(i=1;i<argc;i++)
    {
        if(argv[i][0]=='-')
        {
            switch(tolower(argv[i][1]))
            {
            case 'p':
                if(strlen(argv[i])>3)
                    port=atoi(&argv[i][3]);
                break;
            case 'h':
                hostname=&argv[i][3];
                break;
            default:
                userhelp();
                break;
            }
        }
    }
    return;
}

void errorprint(char * x)
{
    printf("Error %d : %s\n",WSAGetLastError(),x);
}

void userhelp()
{
    printf("user help:   -h:str  -p:int\n");
    printf("             -h:str The Host name \n");
    printf("             -p:int The Port number to use\n");
    ExitProcess(-1);
}




// TCP.c.cpp : 定义控制台应用程序的入口点。
//
#include<stdio.h>
#pragma comment(lib,"wsock32.lib")
#include<WinSock2.h>

#define MAX_SER 10

char *hostname;
unsigned short maxservice;
unsigned short port;

void initial();//系统初始化(主机名、最大服务进程数、端口号)
int initsockets();
void getargments(int argc,char** argv);//获取用户提供的选项
void errorprint(char * x);
void userhelp();
int loopcontrol(SOCKET listenfd,int ismultitasking);
void service(LPVOID lpv);





int main(int argc,char**argv)
{
SOCKET listenfd;
int err;
struct sockaddr_in serveraddr;
struct hostent *ptrhost;

initial();//初始化系统

getargments(argc,argv);//获取参数
initsockets();//初始化socket