首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >关于云服务器返回数据的问题?

关于云服务器返回数据的问题?

提问于 2018-09-22 18:59:58
回答 1关注 0查看 464

我在云服务器上运行了一个socket。

本地运行时,从浏览器访问,会返回一个html。

但是在云服务器上,就一直没有数据返回,不知道什么原因。

这是源码,不知道有没有大佬看看。

程序运行用sudo ./a.out

浏览器http://ip:80/?**w1234**

就是向本地文件夹写入一个1234的串,并给浏览器返回一个submit success字符串,挂在云服务器上就一直没有返回。

#include <unistd.h>

#include <netinet/in.h>

#include <sys/socket.h>

#include <time.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define MAXLINE 4096

// write

char line[MAXLINE];

char sendline[MAXLINE];

void getTime(char *dat,char *tim){

time_t tick = time(NULL);

struct tm *t = localtime(&tick);

strftime(dat,15,"%Y%m%d",t);

strftime(tim,7,"%H%M%S",t);

}

void responseHeader(int fd){

bzero(sendline,sizeof(sendline));

strcat(sendline,"HTTP/1.1 200 OK\r\n");

strcat(sendline,"Server: mtl6906\r\n");

strcat(sendline,"Date: ");

time_t tick = time(NULL);

strcat(sendline,ctime(&tick));

strcat(sendline,"Content-Type: text/html\r\n");

strcat(sendline,"Content-Length: ");

write(fd,sendline,strlen(sendline));

}

void doWrite(int fd, char *msg){

char filename[15],cur[7];

getTime(filename,cur);

FILE *fp = fopen(filename,"a+");

fprintf(fp,"%s %s\n",cur,msg);

responseHeader(fd);

char ps[] = "submit success!\n";

char sz[10] = {0};

snprintf(sz,sizeof(sz),"%ld\r\n\r\n",strlen(ps));

if(write(fd,sz,strlen(sz)) < 0){

printf("write error\n");

exit(1);

}

fclose(fp);

}

// read

void doRead(int fd, char *msg){

FILE *fp = fopen(msg,"r");

responseHeader(fd);

int len = read(fileno(fp),line,MAXLINE);

char sz[10] = {0};

snprintf(sz,sizeof(sz),"%d\r\n\r\n",len);

write(fd,sz,strlen(sz));

write(fd,line,len);

}

int main(){

int fd = socket(AF_INET,SOCK_STREAM,0);

if(fd < 0)

{

printf("socket error\n");

exit(1);

}

else

printf("create socket...\n");

sockaddr_in servaddr;

memset(&servaddr,0,sizeof(servaddr));

servaddr.sin_family = AF_INET;

servaddr.sin_port = htons(8080);

servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

if(bind(fd,(struct sockaddr *)&servaddr,sizeof(servaddr)) < 0){

printf("bind error\n");

exit(1);

}

else

printf("binding...\n");

if(listen(fd,100) < 0){

printf("listen error\n");

exit(1);

}

else

printf("listening...\n");

int connfd;

char line[MAXLINE];

char str[100];

time_t ticks;

int len,i,j;

for(;;){

if((connfd = accept(fd,(struct sockaddr*)NULL,NULL)) < 0){

printf("accept error....\n");

exit(1);

}

else

printf("accepting...\n");

// recive msg

read(connfd,line,100);

// character handle

len = strlen(line);

for(i=0;i<len;i++)

if(line[i] == '*' && line[i+1] == '*' ){

i+=2;

break;

}

char op = line[i++];

for(j=0;j<len;j++){

if(line[i+j] == '*'&&line[i+j+1]=='*')

break;

str[j] = line[i+j];

}

str[j] = 0;

// chooese service

switch(op){

case 'w':

doWrite(connfd,str);

break;

case 'r':

doRead(connfd,str);

break;

default:

break;

}

// recover source

close(connfd);

}

}

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档