• 大小: 918KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-18
  • 语言: 其他
  • 标签: socket编程  

资源简介

(1) 在发送端模拟数据从高层到低层的封装过程,在接收端模拟数据从低层到高层的解封装过程; (2) 按照每层的功能对数据填加报头,并显示每一层得到的封/解装格式; (3) 传输层和网络层的封装格式参考TCP/IP的相应各层协议格式; (4) 网络层的IP报文需要模拟报文分段和重组的过程; (5) 数据链路层帧格式参考局域网的MAC帧格式; (6) 物理层显示为0或1比特串。

资源截图

代码片段和文件信息

//需要在连接器中加入-lwsock32
#include
#include 
#include 
#include
#include 
#include “head.h“
#pragma comment(lib “ws2_32.lib“)  //加载 ws2_32.dll
using namespace std;
#define MAXSIZE 10000
#define MYPORT 5000
 /*int input(char a[]){
gets(a);
return 0;
}*/


int main(){
    //初始化DLL
    WSADATA wsaData;
    WSAStartup(MAKEWORD(2 2) &wsaData);
printf(“If you want to eixtplease input exit and press enter \n“);
sleep(2);
    //创建套接字
    SOCKET sock_cli = socket(PF_INET SOCK_STREAM IPPROTO_TCP);

    //向服务器发起请求
    sockaddr_in sockAddr;
    //memset(&sockAddr 0 sizeof(sockAddr));  //每个字节都用0填充
    sockAddr.sin_family = PF_INET;
    sockAddr.sin_addr.s_addr = inet_addr(“198.168.123.1“);
    sockAddr.sin_port = htons(MYPORT);
    //connect(sock_cli (SOCKADDR*)&sockAddr sizeof(SOCKADDR));

if(connect(sock_cli (SOCKADDR*)&sockAddr sizeof(SOCKADDR))<0)
{
printf(“connect error!\n“);
exit(1);
}


    //接收服务器传回的数据
    char buffer[MAXSIZE] = {0};
    recv(sock_cli buffer MAXSIZE 0);
printf(“***SERVER***%s“buffer);
    //输出接收到的数据
    printf(“Message form server: %s\n“ buffer);

//循环发送消息给服务端,当发送exit时系统自动退出
while(1)
{
char mymsg[MAXBYTE];
//printf(“you can chat with server now:\n“);
  string data;
        cout<<“请输入你想要传输的数据: “<        cin>>data;
        Applayer app;
        app.appboudling(data);
        app.show();
        Tralayer tra;
        tra.Traboudling(app);
        tra.show();
        Netlayer net;
        net.Netboudling(tra);
        net.show();
        Datalinklayer Datalink;
        Datalink.Databoudling(net);
        Datalink.show();
        Phylayer phy;
        phy.Phyboudling(Datalink);
        phy.show();
//input(mymsg);
 phy.message.copy(mymsgstr.length()0); //这里5,代表复制几个字符,0代表复制的位置
         mymsg[str.length()]=‘\0‘ ;//要手动加上结束符str.length()
 send(sock_climymsgstrlen(mymsg)+sizeof(char)0);
/*
           recv函数中的bufferlength参数是可以固定值的
           send函数中的bufferlength参数不能固定值,需要看实际长度,并且考虑到‘\0‘字符串
        */
        if(strcmp(mymsg“exit\n“)==0)
         break;

}


    //关闭套接字
    closesocket(sock_cli);
    //终止使用 DLL
    WSACleanup();
    system(“pause“);
    return 0;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        736  2016-12-13 22:50  Project1\Applayer.h

     文件        971  2016-12-13 23:32  Project1\Appunlayer.h

     文件       2465  2016-12-20 20:11  Project1\client.cpp

     文件       1235  2016-12-13 16:11  Project1\Datalinklayer.h

     文件        495  2016-12-13 22:47  Project1\Dataunlinklayer.h

     文件        176  2016-12-13 12:07  Project1\head.h

     文件       1850  2016-12-13 16:11  Project1\Netlayer.h

     文件        537  2016-12-13 22:49  Project1\Netunlayer.h

     文件        745  2016-12-13 20:51  Project1\Phylayer.h

     文件        386  2016-12-13 22:48  Project1\Phyunlayer.h

     文件        520  2016-12-13 11:57  Project1\sender.cpp

     文件    1024161  2016-12-20 19:57  Project1\sender.exe

     文件      35775  2016-12-20 19:57  Project1\sender.o

     文件       1145  2016-12-13 23:17  Project1\server.cpp

     文件    1022357  2016-12-20 20:03  Project1\server.exe

     文件      31351  2016-12-20 20:03  Project1\server.o

     文件       2589  2016-12-20 20:11  Project1\server1.cpp

     文件        339  2017-12-17 17:01  Project1\str.cpp

     文件     957602  2017-12-17 17:01  Project1\str.exe

     文件       2329  2017-12-17 17:01  Project1\str.o

     文件    1145294  2016-12-14 17:05  Project1\thread.exe

     文件     193669  2016-12-14 17:05  Project1\thread.o

     文件       1905  2016-12-13 16:12  Project1\Tralayer.h

     文件        589  2016-12-13 22:48  Project1\Traunlayer.h

     目录          0  2017-12-17 17:01  Project1

----------- ---------  ---------- -----  ----

              4429221                    25


评论

共有 条评论