myserver myclient

来源:互联网 发布:ug编程里高度是什么 编辑:程序博客网 时间:2024/05/21 12:39

myserver


#include <unistd.h>#include <netinet/in.h>    // for sockaddr_in#include <sys/types.h>    // for socket#include <sys/socket.h>    // for socket#include <stdio.h>        // for printf#include <stdlib.h>        // for exit#include <string.h>        // for bzero#define PORT_NUM 6666 #define LISTEN_MAX 20#define FILENAME_LEN 512 #define BUF_MAX_LEN 1024int main(int argc, char **argv){//建立server主机信息//设置一个socket地址结构server_addr,代表服务器internet地址, 端口struct sockaddr_in server_addr;bzero(&server_addr, sizeof(server_addr));server_addr.sin_family = AF_INET;server_addr.sin_port = htons(PORT_NUM);server_addr.sin_addr.s_addr = htonl(INADDR_ANY);//建立socket//创建用于internet的流协议(TCP)socket,用server_socket代表服务器socketint socket_server_fd;//socket 返回值socket_server_fd = socket(AF_INET, SOCK_STREAM, 0);if(socket_server_fd == -1){perror("socket create failed\n");exit(1);}int opt =1; setsockopt(socket_server_fd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));//bind //把socket和socket地址结构联系起来socklen_t server_addrlen = sizeof(server_addr);if ( bind(socket_server_fd, (struct sockaddr *)&server_addr, server_addrlen) == -1){perror("bind failed\n");exit(1);}//listenif( listen(socket_server_fd, LISTEN_MAX) == -1){perror("listen failed\n");exit(1);}while(1){//建立client主机信息 //定义客户端的socket地址结构client_addrstruct sockaddr_in client_addr;//bzero(&client_addr, sizeof(client_addr));//client_addr.sin_family = AF_INET;//client_addr.sin_port = htons(PORT_NUM);//client_addr.sin_addr.s_addr = htonl(INADDR_ANY);//接受一个到server_socket代表的socket的一个连接   //如果没有连接请求,就等待到有连接请求--这是accept函数的特性    //accept函数返回一个新的socket,这个socket(new_server_socket)用于同连接到的客户的通信   //new_server_socket代表了服务器和客户端之间的一个通信通道    //accept函数把连接到的客户端信息填写到客户端的socket地址结构client_addr中socklen_t client_addrlen = sizeof(client_addr);int server_client_fd;server_client_fd = accept(socket_server_fd, (struct sockaddr *)&client_addr, &client_addrlen);if(server_client_fd == -1){perror("accept failed\n");exit(1);}//int fread_len = fread(filename, sizeof(char), FILENAME_LEN, server_client_fd);//从客户端读取数据char buf[BUF_MAX_LEN];bzero(buf, BUF_MAX_LEN);recv(server_client_fd, buf, BUF_MAX_LEN, 0);char filename[FILENAME_LEN];bzero(filename, FILENAME_LEN);strncpy(filename, buf, strlen(buf)>FILENAME_LEN ? FILENAME_LEN : strlen(buf));printf("%s\n",filename);FILE *fp = fopen(filename, "r");if(fp == NULL){perror("fopen failed....ll\n");exit(1);}//begin send fileprintf("send %s...\n", filename);int fread_buf_len;while( (fread_buf_len = fread(buf, sizeof(char), BUF_MAX_LEN, fp)) ){//fwrite(buf, sizeof(char), fread_buf_len, server_client_fd);printf("file_block_length(fread_buf_len) = %d\n",fread_buf_len);write(server_client_fd, buf, fread_buf_len);}printf("send %s ok\n", filename);fclose(fp);close(server_client_fd);}close(socket_server_fd);return 0;}





 myclient


#include <arpa/inet.h>#include <netinet/in.h>    // for sockaddr_in#include <sys/types.h>    // for socket#include <sys/socket.h>    // for socket#include <stdio.h>        // for printf#include <stdlib.h>        // for exit#include <string.h>        // for bzero#include <unistd.h>#define PORT_NUM 6666#define LISTEN_MAX 20#define FILENAME_LEN 512 #define BUF_MAX_LEN 1024int main(int argc, char **argv){struct sockaddr_in client_addr;int socket_client = socket(AF_INET, SOCK_STREAM, 0);//设置一个socket的sockaddr_in的结构体,存server的internet地址,端口struct sockaddr_in server_addr;server_addr.sin_family = AF_INET;server_addr.sin_port = htons(PORT_NUM);if ( inet_aton(argv[1], &server_addr.sin_addr) == 0 ){       printf("Server IP Address Error!\n");       exit(1);} socklen_t server_addr_len = sizeof(server_addr);//向服务器发起连接,连接成功后client_socket代表了客户机和服务器的一个socket连接if ( connect(socket_client, (struct sockaddr *)&server_addr, server_addr_len) < 0 ){printf("Can Not Connect To %s!\n",argv[1]);        exit(1);}char filename[FILENAME_LEN];bzero(filename, FILENAME_LEN);char buf[BUF_MAX_LEN];bzero(buf, BUF_MAX_LEN);printf("Input get filename:\n"); scanf("%s", buf);//gets(buf);strncpy(filename, buf, strlen(buf)>BUF_MAX_LEN ? BUF_MAX_LEN : strlen(buf));send(socket_client, filename, strlen(filename), 0); //发送给服务器server//准备接收从服务器发来的数据FILE *fp = fopen(filename, "w");if(fp == NULL){        printf("File:%s Can Not Open To Write\n", filename);        exit(1);}printf("receive %s ...\n", filename);int recv_len = 0;while( (recv_len = recv(socket_client, buf, BUF_MAX_LEN, 0)) ){if(recv_len < 0){printf("Recieve Data From Server %s Failed!\n", argv[1]);            exit(1);}int fwrite_len = fwrite(buf, sizeof(char), recv_len, fp);if(fwrite_len < recv_len){printf("File:%s Write Failed\n", filename);            exit(1);}}fclose(fp);//printf("Recieve File:\t %s From Server[%s] Finished\n",file_name, argv[1]);printf("Receive %s ok .From Server[%s]\n", filename, argv[1]);//关闭socketclose(socket_client);return 0;}




0 0
原创粉丝点击