IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 互联网应用 -- lab 3 -> 正文阅读

[网络协议]互联网应用 -- lab 3

TCP Socket

Client

'If you want to transmit .txt file , change the out.jpg to out.txt'

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<unistd.h>
#include<netinet/in.h>
#include <arpa/inet.h>
#include <fcntl.h>

#define MAXDATASIZE 2048

int main(int argc, char *argv[])

{

    if(argc<3){
        printf("Usage: %s <Servcer IP> <Port> <File Name>\n",argv[0]);
        return 0;
    }

    int sockfd;
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    const char *server_ip = argv[1]; 
    struct sockaddr_in serveraddr;
    bzero(&serveraddr, sizeof(serveraddr));
    serveraddr.sin_family = AF_INET;
    serveraddr.sin_port = htons(atoi(argv[2]));
    inet_pton(AF_INET, server_ip, &serveraddr.sin_addr);
    connect(sockfd, (struct sockaddr*)&serveraddr, sizeof(serveraddr));
    printf("=====================服务器链接成功=====================\n");

    char buf[MAXDATASIZE];
    char *filename=argv[3];
    printf("Request File :%s\n",filename);
    send(sockfd,filename,sizeof(filename),0);
    memset(buf, '\0', MAXDATASIZE/sizeof (char));

    FILE* fd;
    int recvNum;

    fd=fopen("out.jpg","wb");
    while((recvNum=recv(sockfd,buf,sizeof(buf),0))>0){
        printf("Receive: %d\n",recvNum);
        fwrite(buf,recvNum,1,fd);
        memset(buf, '\0', MAXDATASIZE/sizeof (char));
    }

    close(sockfd);
    fclose(fd);

    return 0;

}

Server

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<unistd.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include <fcntl.h>

#define BACKLOG 10
#define MAXDATASIZE  2048

int main(int argc, char *argv[])
{
    if(argc!=2){
        printf("Usage: %s <Port> \n",argv[0]);
        return 0;
    }
    int listenfd;
    listenfd = socket(AF_INET, SOCK_STREAM, 0);
    struct sockaddr_in serveraddr;
    bzero(&serveraddr, sizeof(serveraddr));
    serveraddr.sin_family = AF_INET;
    serveraddr.sin_port = htons(atoi(argv[1])); 
    serveraddr.sin_addr.s_addr = INADDR_ANY;
    bind(listenfd, (struct sockaddr*)&serveraddr, sizeof(serveraddr));
    listen(listenfd, BACKLOG);
    printf("======bind success,waiting for client's request on port:%s======\n",argv[1]);
    struct sockaddr_in peeraddr;
    socklen_t peer_len = sizeof(peeraddr);

    int connfd;
    while(1)
    {
        connfd = accept(listenfd, (struct sockaddr*)&peeraddr, &peer_len);
        printf("\n=====================客户端链接成功=====================\n");
        printf("IP = %s:PORT = %d\n", inet_ntoa(peeraddr.sin_addr), ntohs(peeraddr.sin_port));

        char buf[MAXDATASIZE];

        while(1)
        {
            memset(buf, '\0', MAXDATASIZE/sizeof (char));
            int recv_length = recv(connfd, buf, MAXDATASIZE/sizeof (char), 0);
            if(recv_length == 0)
            {
                printf("client has closed!\n");
                break;
            }

            int len,nread;
            FILE* fd;
            printf("request file name: %s\n",buf);
            fd=fopen(buf,"rb");
            fseek(fd,0,SEEK_END);
            len=ftell(fd);
            fseek(fd,0,SEEK_SET);
            printf("file length: %d\n",len);

            while((nread=fread(buf,1,MAXDATASIZE/sizeof(char),fd))>0){
                int sendNum;
                if((sendNum=send(connfd,buf,nread,0))!=nread){
                    printf("sending error %d\n",sendNum);
                }
                printf("sending data : %d\n",sendNum);
                memset(buf, '\0', MAXDATASIZE/sizeof (char));

            }
            fclose(fd);
            shutdown(connfd,SHUT_WR);
            recv(connfd,buf,MAXDATASIZE/sizeof (char), 0);
        }
        close(connfd);
        close(listenfd);
        
        return 0;
    }
}

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-05-18 17:59:21  更:2022-05-18 18:01:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 9:44:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码