久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
基于GCC_TCPIP Socket—服務(wù)端文件傳輸
[打印本頁]
作者:
xiaojuan
時間:
2014-9-18 12:54
標題:
基于GCC_TCPIP Socket—服務(wù)端文件傳輸
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <errno.h>
#include <signal.h>
#define IPLEN 40
#define NUM 1024
#define RCVPORT 1990
#define NAME 45
#define EOF (-1)
int my_open(int sd,char *p);
int my_rdwr(int fd,int stat_st_size,int sd);
int main(int argc,char * argv[])
{
int fd;
int i=1;
int sockedfd;
int newsockedfd;
int stop = EOF;
char buf[20];
size_t len;
struct sockaddr_in local_addr;
struct sockaddr_in peer_addr;
socklen_t addr_len;
char ipstr[IPLEN];
pid_t fpid;
sockedfd = socket(PF_INET, SOCK_STREAM, 0);
if(sockedfd< 0){
perror("socket()");
exit(1);
}
setsockopt(sockedfd,SOL_SOCKET,SO_REUSEADDR,&i,sizeof(i) );
local_addr.sin_family = PF_INET;//ipv4
local_addr.sin_port = htons(RCVPORT);
inet_pton(PF_INET, "0.0.0.0", &local_addr.sin_addr);//邦定端口
if(bind(sockedfd, (struct sockaddr *)&local_addr, sizeof(local_addr)) < 0){
perror("bind()");
exit(1);
}
if(listen(sockedfd, 200) < 0){
perror("listen()");
exit(1);
}
while(1)
{
addr_len = sizeof(peer_addr);
newsockedfd = accept(sockedfd,(void*)&peer_addr, &addr_len);
if(newsockedfd < 0)
{
perror("accept()");
exit(1);
}
i=1;
char n='0';
#if 1
fpid=fork();
if(0 ==fpid )
{
close(sockedfd);//關(guān)閉父進程監(jiān)聽描述符
#endif
while(1)
{
len = read(newsockedfd,buf,1);
if(0 > len )
{
perror("read()");
return -1;
}
if( 0 ==len )
break;
if ( '0'==n )
{
n=buf[0];
printf("n=%c, i=%d \n",n,i);
if(n<'4'&&n>='1')
{
snprintf(buf,sizeof(buf),"music/%c.wma",n);
printf("%s \n",buf);
my_fopen_rdwr(newsockedfd,buf);
}
else
{
printf("ERROR()\n");
len=write(newsockedfd,&stop,4);
if(len<0)
{
perror("write()");
printf("writr end fill");
}
n='0';
break;
}
}
else
{
if( NAME == i )
{//圖片張數(shù)
len=write(newsockedfd,&stop,4);//結(jié)束寫19
if(len<0)
{
perror("write()");
printf("writr end fill");
}
break;
}
snprintf(buf,sizeof(buf),"jpg%c/%d.jpg",n,i++);
printf("%s \n",buf);
my_fopen_rdwr(newsockedfd,buf);
}
}
close(newsockedfd);
exit(0);
}
else if (0 < fpid)
{
close(newsockedfd);//父進程關(guān)閉新套接字
signal(SIGCLD, SIG_IGN);//通知內(nèi)核回收進程,該進程不是父進程回收
}
else
{
printf("this is fork error\n");
}
//printf("*******%s %s %d****pid=%d****\n",__FILE__,__FUNCTION__,__LINE__,fpid);
}
close(sockedfd);
return 0;
}
int my_fopen_rdwr(int sd,char *p)
{
struct stat stat_init;
size_t ret;
int pos,pos1;
char buf[NUM];
int j=0;
FILE * fd;
fd=fopen(p,"r");
if(fd<0)
{
perror("fopen()");
return -1;
}
if(stat(p,&stat_init)<0)
{
perror("stat()");
return -1;
}
#if 1
ret=write(sd,&stat_init.st_size,4);
pos1+=ret;
if(ret<0)
{
perror("write()");
return -1;
}
#endif
while(stat_init.st_size>0)
{
pos=0;
pos1=0;
ret=fread(buf+pos,sizeof(char),NUM,fd);
pos+=ret;
if(ret<0){
perror("fread()");
return -1;
}
ret=write(sd,buf+pos1,ret);
pos1+=ret;
if(ret<0){
perror("write()");
return -1;
}
stat_init.st_size-=ret;
}
printf("is over*******\n");
fclose(fd);
return 0;
}
本服務(wù)端代碼測試通過 ,cpu占用率低,該服務(wù)端是采用多進程方式通訊,有客戶端連接到服務(wù)端時,父進程會fork個子進程,子進程來連接客戶,父進程繼續(xù)監(jiān)聽端口,子進程下載完畢后自動退出,這樣做的目的是在沒有客戶連接時,只有父進程一個處于監(jiān)聽狀態(tài),節(jié)約內(nèi)存,提高性能,要是有多個客戶連接,父進程只管fork子進程,節(jié)約了時間,同時可以多個客戶端下載,本代碼出錯處理不夠完善,后期繼續(xù)跟新,如有建議和本人寫的不足之處敬請給位多多指教。
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
免费午夜电影
|
久久国产精品久久久久久
|
免费一看一级毛片
|
成年人在线播放
|
夜夜爽99久久国产综合精品女不卡
|
国产91九色
|
二区av
|
伊人网站视频
|
青青久在线视频
|
国产日韩中文字幕
|
亚洲一在线
|
日韩一二三区
|
国产精品久久久久久久岛一牛影视
|
99爱国产
|
中文字幕在线视频免费观看
|
亚洲精品久久久久久久久久吃药
|
国产亚洲精品精品国产亚洲综合
|
亚洲一区二区三区免费观看
|
亚洲精品亚洲人成人网
|
日日夜夜精品视频
|
日韩久久久久久久
|
日韩在线中文字幕
|
四虎永久免费影院
|
亚洲精品久久
|
久久精品视频免费看
|
在线看av网址
|
欧美v免费
|
国产久
|
国产精品一区二区欧美黑人喷潮水
|
国产精品永久免费视频
|
视频在线观看一区
|
亚洲一区有码
|
国产韩国精品一区二区三区
|
草草在线观看
|
蜜桃视频在线观看免费视频网站www
|
欧美欧美欧美
|
国产一级毛片精品完整视频版
|
欧美三级免费观看
|
中文字幕日韩一区
|
欧美精品一区二区三区四区 在线
|
国产美女免费视频
|