xmuyong 发表于 2013-05-08 17:46

简单的socket程序,【Connection refused】,求解答

刚开始学习网络编程,写了一个简单的程序就出错了,程序如下:

server.cpp
#include <sys/socket.h>
#include <stdio.h>
#include <error.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
    if(argc != 2)
    {
      fprintf(stderr, "argus error\n");
      exit (-1);
    }
    // creat socket
    int socketFd = socket(AF_INET,SOCK_STREAM,0); // creat a socket
    if(socketFd < 0)
    {
      fprintf(stderr, "can not open socket\n");
      exit (-1);
    }
    fprintf(stdout ,"socket: %d\n",socketFd);

    // bind
    struct sockaddr_in serverAddr;
    struct sockaddr_in clientAddr;
    int portNumer = atoi(argv);
    if(portNumer < 0)
    {
      fprintf(stderr,"portNumer error\n");
      exit (-1);
    }
    fprintf(stdout ,"portNum: %d\n",portNumer);
    bzero(&serverAddr,sizeof(struct sockaddr_in));
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);
    serverAddr.sin_port = htons(portNumer);
    int bindRet = bind(socketFd,(struct sockaddr *) (&serverAddr),sizeof(struct sockaddr));
    if(bindRet < 0)
    {
      fprintf(stderr,"bind error\n");
      exit (1);
    }


    // listen socket
    if(listen(socketFd,5) < 0)
    {
      fprintf(stderr,"listen error\n");
      exit (1);
    }
    char hello[]= "hello,world\n";
    while (1)
    {
      socklen_t tmpSize = sizeof(struct sockaddr_in);
      int newFd = accept(socketFd,(struct sockaddr *)(&clientAddr),&tmpSize);
      fprintf(stdout, "newFd: %d\n",newFd);
      if(newFd < 0)
      {
            fprintf(stderr,"accept error\n");
            exit (-1);
      }
      fprintf(stdout,"Server get con from %s\n", inet_ntoa(clientAddr.sin_addr));
      if(write(newFd,hello,strlen(hello)) < 0)
      {
            fprintf(stderr,"write error\n");
            exit (-1);
      }
      close(newFd);
    }
    close(socketFd);
    exit (0);
}
client
#include <sys/socket.h>
#include <stdio.h>
#include <error.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <netdb.h>
#include <errno.h>
int main(int argc, char *argv[])
{
    if(argc != 3)
    {
      fprintf(stderr, "argus error\n");
      exit (-1);
    }
    // get host name
    struct hostent *host = gethostbyname(argv);
    if(host == NULL)
    {
      fprintf(stderr, "can not get host name\n");
      exit (-1);
    }
    char str;
    fprintf(stdout, "ip address is %s\n", inet_ntop(host->h_addrtype,host->h_addr,str,sizeof(str)));



    // get portnumber
    int portNumer = atoi(argv);
    if(portNumer < 0)
    {
      fprintf(stderr,"portNumer error\n");
      exit (-1);
    }

    // creat socket
    int socketFd = socket(AF_INET,SOCK_STREAM,0); // creat a socket
    if(socketFd < 0)
    {
      fprintf(stderr, "can not open socket\n");
      exit (-1);
    }
    fprintf(stdout ,"socket: %d\n",socketFd);

    // get server info
    struct sockaddr_in serverAddr;
    bzero(&serverAddr,sizeof(struct sockaddr_in));
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_port = htons(portNumer);
    serverAddr.sin_addr = *((struct in_addr *)host->h_addr);
//    inet_pton(AF_INET,host->h_addr,serverAddr.sin_addr);

    // connect to server
    if(connect(socketFd,(struct sockaddr*)(&serverAddr),sizeof(struct sockaddr)) == -1)
    {
      fprintf(stderr, "connect error: %s\n",strerror(errno));
      exit (-1);
    }
    char buffer;
    int readSize= read(socketFd,buffer,sizeof(buffer));
    if(readSize < 0)
    {
      fprintf(stderr, "read error\n");
      exit (-1);
    }
    fprintf(stdout, "readBuffer: %s\n",buffer);
    close(socketFd);
    exit (0);
}在同一台机器上,用如下方法启动server
./server 63002
之后运行
nc 127.0.0.1 63002 ==> 显示 hello, world


telnet 127.0.0.1 63002 显示如下:
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
hello,world
Connection closed by foreign host.


运行:./client 127.0.0.1 63002,显示如下信息

ip address is 127.0.0.1
socket: 3
connect error: Connection refused

求解答,谢谢

xmuyong 发表于 2013-05-09 08:36

找到问题了,取端口的时候,应该用argv
页: [1]
查看完整版本: 简单的socket程序,【Connection refused】,求解答