简单的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
求解答,谢谢 找到问题了,取端口的时候,应该用argv
页:
[1]