#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h> //sockaddr_in
#define PORT 6675
int main()
{
int socket_fd;
int new_fd; //建立套接字
socket_fd=socket(AF_INET,SOCK_STREAM,0);// int socket(int domain, int...
printf("socket_fd is %d\n",socket_fd);
//初始化设置地址和端口号
struct sockaddr_in server_addr;
memset(&server_addr,0,sizeof(server_addr));
server_addr.sin_family=AF_INET;
server_addr.sin_port=htons(PORT);
server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
memset(&(server_addr.sin_zero),0,8);
//设置端口可重用
int contain;
setsockopt(socket_fd,SOL_SOCKET, SO_REUSEADDR, &contain, sizeof(int));
//绑定fd和本机地址
int res=bind(socket_fd,(struct sockaddr *)&server_addr,sizeof(server_addr));
printf("bind res is %d\n",res);
if(res==-1) return -1;
if(listen(socket_fd,20)==-1)
{
printf("Failed to listen!\n");
return -1;
}
printf("after listen\n");
while(1)
{
struct sockaddr_in client_addr;
int size=sizeof(client_addr);
new_fd=accept(socket_fd, (struct sockaddr *)&client_addr, &size);
if(new_fd==-1)
{
printf("wait for client to connect!\n");
sleep(1);
continue;
}
printf("A connect and the new fd is %d\n",new_fd);
/*
while(1)
{ char input[100];
char output[100];
res=read(new_fd,input,100);
input[res]=0;
printf("client says '%s'\n",input);
gets(output);
res=write(new_fd,output,strlen(output));
}
*/
//while(1)
{
FILE *in;
char input[100];
res=read(new_fd,input,100);
input[res]=0;
char path[100];
sprintf(path,"/mnt/hgfs/share/socketPicSend/server/%s",input);
printf("the path is %s\n",path);
in=fopen(path,"w");
printf("after path\n");
char photo[10];
while(1)
{
memset(photo,0,10);
res=read(new_fd,photo,10);
if(res==0){printf("read nothing"); return 0;}
photo[res]=0;
int d=atoi(photo);
// printf("data %s\n",photo);
fputc(d,in);
}
}
}
close(socket_fd);
close(new_fd);
}
评论0
最新资源