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

  • 回答 (1)
  • 关注 (0)
  • 查看 (104)

我在云服务器上运行了一个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);

}

}

用户1500073用户1500073提问于
housenimeia回答于

两点,第一点,检查下你的a.out的权限,确保其有写入文件的权限。第二点,检查下安全组设置,确保你的http协议端口开放。

所属标签

可能回答问题的人

  • 腾讯云计算产品团队

    腾讯云 · 产品团队 (已认证)

    145 粉丝0 提问0 回答
  • CVM 产品团队

    29 粉丝0 提问8 回答
  • 小仙女和科学家

    9 粉丝0 提问0 回答
  • 怕冷的阳阳

    腾讯云 · 高级工程师 (已认证)

    20 粉丝1 提问0 回答
  • DRRR

    腾讯云 · 产品经理 (已认证)

    7 粉丝0 提问4 回答
  • candyxiao

    腾讯 · 高级产品经理 (已认证)

    15 粉丝0 提问7 回答

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励