linuxシステムプログラミング-OCKET通信基礎プログラミング-UDPプログラミング実現ファイルダウンロード
5924 ワード
UDPプログラミングインプリメンテーションファイルダウンロードベーステンプレートは、以下の参照を参照してください.
linuxシステムプログラミング-OCKET通信基礎プログラミング(0)-UDPプログラミング
linuxシステムプログラミング-OCKET通信基礎プログラミング(1)-UDPプログラミングサービス端プログラム
linuxシステムプログラミング-OCKET通信基礎プログラミング(2)-UDPプログラミングクライアントプログラム
プログラムの原理:ファイルの読み書き操作を増加しました
サービスエンドプログラム
クライアントプログラム
linuxシステムプログラミング-OCKET通信基礎プログラミング(0)-UDPプログラミング
linuxシステムプログラミング-OCKET通信基礎プログラミング(1)-UDPプログラミングサービス端プログラム
linuxシステムプログラミング-OCKET通信基礎プログラミング(2)-UDPプログラミングクライアントプログラム
プログラムの原理:ファイルの読み書き操作を増加しました
サービスエンドプログラム
#include
#include /* See NOTES */
#include
#include
#include
#include
#include
#include
#define SERVER_PORT 8888
#define BUFLEN 256
int setup_socket()
{
//1, socket
int sock_server = socket(AF_INET, SOCK_DGRAM, 0);
if(sock_server < 0)
{
perror("socket");
return -1;
}
//2,
struct sockaddr_in server_addr;
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(SERVER_PORT);
server_addr.sin_addr.s_addr = INADDR_ANY;
//
int on = 1;
if(setsockopt(sock_server, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) == -1){
perror("setsockopt");
return -1;
}
//3,bind
if(bind(sock_server, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0)
{
return -1;
}
return sock_server;
}
int main(int argc, char *argv[])
{
char buf[BUFLEN] = {0};
int ret = 0, server_sock;
struct sockaddr_in client_addr;
bzero(&client_addr, sizeof(client_addr));
socklen_t len = sizeof(client_addr);
FILE *srcFile = NULL; //
int numByte = 0; //
int IsEnd = 1; //
int IsCloseServer = 1; //
server_sock = setup_socket();
if(server_sock < 0)
{
return -1;
}
while(1)
{
//4,
ret = recvfrom(server_sock, buf, BUFLEN-1, 0, (struct sockaddr*)&client_addr, &len);
if( ret < 0 )
{
perror("recvfrom");
continue;
}
printf("client ip:%s, port: %d
", (char *)inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));
printf("recvfrom : %s
", buf);
// , ,
srcFile = fopen(buf, "r");
if (NULL == srcFile) //
{
perror(buf);
return -1;
}
//bzero(buf, sizeof(buf));
memset(buf,0,BUFLEN);
// ,
while(IsEnd)
{
//
numByte = fread(buf, 1, BUFLEN, srcFile);
//5,
//strcpy(buf, "Hello World
");
//sleep(1);
ret = sendto(server_sock, buf, numByte, 0, (const struct sockaddr * )&client_addr, len);
//bzero(buf, sizeof(buf));
if( ret == 0 )
{
memset(buf,0,BUFLEN);
break;
}
memset(buf,0,BUFLEN);
//
numByte = fread(buf, 1, BUFLEN, srcFile);
if(feof(srcFile) && numByte == 0)
{
//
//
IsEnd=0;
memset(buf,0,BUFLEN);
printf("feof(srcFile) && numByte == 0
");
ret = sendto(server_sock, buf, numByte, 0, (const struct sockaddr * )&client_addr, len);
break;
}
}
//
fclose(srcFile);
//5,
// bzero(buf, sizeof(buf));
// strcpy(buf, "Hello World
");
// sleep(1);
// ret = sendto(server_sock, buf, strlen(buf), 0, (const struct sockaddr * )&client_addr, len);
// if( ret < 0 )
// {
// perror("sendto");
// }
}
return ret;
}
クライアントプログラム
#include
#include /* See NOTES */
#include
#include
#include
#include
#include
#include
#define SERVER_PORT 8888
#define CLIENT_PORT 6789
#define BUFLEN 256
int main(int argc, char *argv[])
{
int ret = 0;
char buf[BUFLEN] = {0};
struct sockaddr_in server_addr;
socklen_t socklen = sizeof(server_addr);
bzero(&server_addr, sizeof(server_addr));
FILE *newFile = NULL; //
int numByte = 0; //
//1, socket
int cli_sock = socket(AF_INET, SOCK_DGRAM, 0);
if(cli_sock < 0)
{
perror("socket");
return -1;
}
// ,
struct sockaddr_in cli_addr;
bzero(&cli_addr, sizeof(cli_addr));
cli_addr.sin_family = AF_INET;
cli_addr.sin_port = htons(CLIENT_PORT);
cli_addr.sin_addr.s_addr = INADDR_ANY;
if(bind(cli_sock, (struct sockaddr *)&cli_addr, sizeof(cli_addr)) < 0)
{
perror("bind");
goto sock_err;
}
//2,
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(SERVER_PORT);
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
//3,
//strcpy(buf, "I am a client");
if(argc == 3)
{
strcpy(buf,argv[1]); //
ret = sendto(cli_sock, buf, strlen(buf), 0, (struct sockaddr *)&server_addr, socklen);
if( ret < 0)
{
perror("sendto");
goto sock_err;
}
}else
{
printf("
");
return 0;
}
//4,
bzero(buf, sizeof(buf));
ret = recvfrom(cli_sock, buf, BUFLEN, 0, (struct sockaddr *)&server_addr, &socklen);
if( ret < 0 )
{
perror("recvfrom");
goto sock_err;
}else if(ret == 0)
{
printf("ret == 0
");
return 0;
//
//
}
printf("===srecvfrom:%s
", buf);
newFile = fopen(argv[2],"w");
if (NULL == newFile)
{
perror("2.txt");
return -1;
}
//bzero(buf, BUFLEN);
while(1)
{
// buf
//write(fd, buf,....)
//
printf("ret = %d
", ret);
fwrite(buf,ret,1, newFile);
memset(buf,0,BUFLEN);
ret = recvfrom(cli_sock, buf, BUFLEN, 0, (struct sockaddr *)&server_addr, &socklen);
printf("ret = %d
", ret);
if(ret <= 0)
{
//
//
break;
}
}
//
fclose(newFile);
sock_err:
//5, socket
close(cli_sock);
return 0;
}