- 论坛徽章:
- 0
|
刚开始学习网络编程,写了一个简单的程序就出错了,程序如下:
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[1]);
- 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[1]);
- if(host == NULL)
- {
- fprintf(stderr, "can not get host name\n");
- exit (-1);
- }
- char str[64];
- fprintf(stdout, "ip address is %s\n", inet_ntop(host->h_addrtype,host->h_addr,str,sizeof(str)));
- // get portnumber
- int portNumer = atoi(argv[1]);
- 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[1024];
- 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
求解答,谢谢 |
|