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