浏览器与c中服务器套接字的连接

时间:2013-12-19 23:53:38

标签: serversocket

我是网络编程的初学者,我有一个项目,我必须创建一个系统资源管理器。这意味着我将能够在浏览器中编写带有目录的http请求,如果与服务器的连接成功,则将打开上述目录中的文件。

int main(int argc, char** argv)
{
typedef struct tcpip_connection
{
int connfd;         
struct sockaddr_in peer_addr;   
} tcpip_connection;


int s_socket, *fd, port;
char buffer[256];
struct sockaddr_in lis_addr;
struct sockaddr_in peer_addr;
int sopt = 1, n;


s_socket=socket(AF_INET, SOCK_STREAM, 0); 

if(s_socket<0){ 
printf("error: the socket was not created!");
}

if(setsockopt(s_socket , SOL_SOCKET, SO_REUSEADDR, &sopt, sizeof(sopt))){ 
printf("Setsokopt error!");
}

memset(&lis_addr, 0, sizeof(lis_addr));
lis_addr.sin_family = AF_INET;
lis_addr.sin_addr.s_addr = htonl(INADDR_ANY);
lis_addr.sin_port = htons(port);


if ( bind( s_socket, (struct sockaddr*) &lis_addr, sizeof(lis_addr) ) < 0 ){            
  perror(NULL);                             
  exit(-1);
}

if(listen(s_socket,15)<0){       
perror("server.listen");
}

socklen_t peer_addrlen;


while(1){

if((fd = malloc(sizeof(int))) == NULL){
fprintf(stderr, "Out of memory\n");
abort();
}
*fd=accept(s_socket, (struct sockaddr*)&peer_addr,&peer_addrlen);

if(fd<0){
if( errno==EINTR           /* Call interrupted by signal */
|| errno==ECONNABORTED  /* connection was aborted */
|| errno==EMFILE       /* per-process limit of open fds */
|| errno==ENFILE       /* system-wide limit of open fds */
|| errno==ENOBUFS      /* no space for socket buffers */
|| errno==ENOMEM       /* no space for socket buffers */
|| errno==EPERM    /* Firewall blocked the connection */
)
continue;

}

}

if(errno == EBADF)
break;          /* return, the server_socket is closed */
}

bzero(buffer,1024);
n = read(*fd,buffer,1023);
if (n < 0)
{
perror("ERROR reading from socket");
exit(1);
}
printf("Here is the message: %s\n",buffer);


/* Write a response to the client 

n = write(*fd,"I got your message",18);
if (n < 0)
{
perror("ERROR writing to socket");
exit(1);
}
return 0;*/



} 

我不知道我的代码是否有任何问题,但主要问题是我不知道如何让浏览器与服务器连接。有什么我必须在浏览器中写或我是否需要添加一些额外的代码?

1 个答案:

答案 0 :(得分:0)

您忘记初始化端口变量。在调用bind并侦听之前,请尝试设置port = 8080

然后,在您的浏览器中,转到http://localhost:8080/,它应该连接。