首页 > Windows开发 > 详细

网络编程基于windows的实现

时间:2018-08-24 15:41:51      阅读:185      评论:0      收藏:0      [点我收藏+]

首先要导入ws2_32.lib,我的路径在C:\Windows\System32,codeblocks-setting-compiler-linker settings添加。

服务端(首先创建好1.txt)

#include <stdio.h>
#include <cstdlib>
#include <cstring>
#include <unistd.h>
#include <winsock2.h>
#include <iostream>

using namespace std;
const int N = 1024;

int main(int argc, char **argv)
{
    WSADATA wsadata;
    SOCKET ser_sock, cli_sock;
    if(WSAStartup(MAKEWORD(2, 2), &wsadata) != 0)
        puts("ser_0 error");

    FILE *fp = fopen("1.txt", "rb");
    if(!fp) puts("file error");

    ser_sock = socket(PF_INET, SOCK_STREAM, 0);
    if(ser_sock == INVALID_SOCKET) puts("ser_1 error");

    SOCKADDR_IN ser_addr, cli_addr;
    memset(&ser_addr, 0, sizeof(ser_addr));
    ser_addr.sin_family = AF_INET;
    ser_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    ser_addr.sin_port = htons(atoi(argv[1]));
    if(bind(ser_sock, (SOCKADDR *)&ser_addr, sizeof(ser_addr)) != 0) puts("ser_2 error");

    if(listen(ser_sock, 5) != 0) puts("ser_3 error");

    int len = sizeof(cli_addr);
    cli_sock = accept(ser_sock, (SOCKADDR *)&cli_addr, &len);
    if(cli_sock == INVALID_SOCKET) puts("ser_4 error");

    char s[100];
    len = fread(s, 1, 50, fp);//从文件流中读
    send(cli_sock, s, len, 0);
    shutdown(cli_sock, SD_SEND);
    len = recv(cli_sock, s, 50, 0);
    s[len] = 0;
    puts(s);

    closesocket(cli_sock);
    closesocket(ser_sock);
    fclose(fp);
    WSACleanup();
    return 0;
}

 

客户端

#include <stdio.h>
#include <cstdlib>  //atoi
#include <cstring>
#include <unistd.h> //write,read,close
#include <winsock2.h>
#include <iostream>

using namespace std;
const int N = 1024;

int main(int argc, char **argv)
{
    WSADATA wsadata;
    SOCKET sock;
    if(WSAStartup(MAKEWORD(2, 2), &wsadata) != 0)
        puts("cli_0 error");

    FILE *fp = fopen("2.txt", "wb");
    if(!fp) puts("file error");

    sock = socket(PF_INET, SOCK_STREAM, 0);
    if(sock == INVALID_SOCKET) puts("cli_1 error");

    SOCKADDR_IN ser_addr;
    memset(&ser_addr, 0, sizeof(ser_addr));
    ser_addr.sin_family = AF_INET;
    ser_addr.sin_addr.s_addr = inet_addr(argv[1]);
    ser_addr.sin_port = htons(atoi(argv[2]));
    if(connect(sock, (SOCKADDR *)&ser_addr, sizeof(ser_addr)) != 0) puts("cli_2 error");

    char s[100];
    int len = recv(sock, s, 50, 0);
    fwrite(s, 1, len, fp); //写入文件流
    send(sock, "Thank you!", 10, 0);
    cout<<"文件读取成功"<<endl;

    closesocket(sock);
    fclose(fp);
    WSACleanup();
    return 0;
}

 

运行截图:

技术分享图片

网络编程基于windows的实现

原文:https://www.cnblogs.com/lesroad/p/9530067.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!