zoukankan      html  css  js  c++  java
  • C/C++网络编程1——linux下实现

      网络编程就是编写程序使两台联网的计算机相互交换数据。

     例子:服务器端开启一个socket,监听9999端口。客户端向服务器端发起请求,服务器端收到请求以后,给客户端发送一句:"hello world";

    服务器端:

      step1:调用socket函数创建套接字。

      step2:调用bind函数分配ip和端口号。

      step3:调用listen函数转为可接受请求状态。

      step4:调用accept函数受理连接请求。

     1 #include <unistd.h>
     2 #include <iostream>
     3 #include <string>
     4 #include <cstdlib>
     5 #include <arpa/inet.h>
     6 #include <sys/socket.h>
     7 
     8 using namespace std;
     9 
    10 int main()
    11 {
    12     int serv_sock = socket(PF_INET, SOCK_STREAM, 0);
    13     if (serv_sock == -1) {
    14         cout << "socket() error" << endl;
    15         return 0;
    16     }
    17 
    18     sockaddr_in serv_addr;
    19     serv_addr.sin_family = AF_INET;
    20     serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    21     serv_addr.sin_port = htons(9999);
    22 
    23     if (bind(serv_sock, (sockaddr*) &serv_addr, sizeof(serv_addr)) == -1) {
    24         cout << "bind() error" << endl;
    25         close(serv_sock);
    26         return 0;
    27     }
    28 
    29     if (listen(serv_sock, 5) == -1) {
    30         cout << "listen() error" << endl;
    31         close(serv_sock);
    32         return 0;
    33     }
    34 
    35     sockaddr_in clnt_addr;
    36     socklen_t clnt_add_size = sizeof(clnt_addr);
    37     cout << "start listen" << endl;
    38     int clnt_sock = accept(serv_sock, (sockaddr*) &clnt_addr, &clnt_add_size);
    39     if (clnt_sock == -1) {
    40         cout << "accept() error" << endl;
    41         close(clnt_sock);
    42         close(serv_sock);
    43         return 0;
    44     }
    45 
    46     string message = "hello world";
    47     write(clnt_sock, message.c_str(), message.size());
    48 
    49     close(clnt_sock);
    50     close(serv_sock);
    51 
    52     return 0;
    53 }

    客户端:

      step1:调用socket函数创建套接字。

      step2:调用connect函数想服务器端发送连接请求。

     1 #include <unistd.h>
     2 #include <iostream>
     3 #include <string>
     4 #include <cstdlib>
     5 #include <arpa/inet.h>
     6 #include <sys/socket.h>
     7 
     8 using namespace std;
     9 
    10 int main()
    11 {
    12     int clnt_sock = socket(PF_INET, SOCK_STREAM, 0);
    13     if (clnt_sock == -1) {
    14         cout << "socket() error" << endl;
    15         return 0;
    16     }
    17 
    18     sockaddr_in serv_addr;
    19     serv_addr.sin_family = AF_INET;
    20     serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    21     serv_addr.sin_port = htons(9999);
    22 
    23     if (connect(clnt_sock, (sockaddr*) &serv_addr, sizeof(serv_addr)) == -1) {
    24         cout << "connect() error" << endl;
    25         close(clnt_sock);
    26         return 0;
    27     }
    28 
    29     char message[100];
    30     int str_len = read(clnt_sock, message, sizeof(message)-1);
    31     if (str_len == -1) {
    32         cout << "read failed" << endl;
    33         close(clnt_sock);
    34         return 0;
    35     }
    36 
    37     cout << message << endl;
    38     close(clnt_sock);
    39     return 0;
    40 }

       示例中用到了write和read函数,linux中一切都被看作文件,所以套接字也可以像操作文件一样去操作。

  • 相关阅读:
    2019 NJCTF WarmUp
    家用路由器渗透过程总结
    IOT 安全资料整合(主要是路由器)
    由一道工控路由器固件逆向题目看命令执行漏洞
    路由器漏洞挖掘之 DIR-850/645 命令执行漏洞复现
    路由器漏洞挖掘之 DIR-815 栈溢出漏洞分析
    从外网到内网的渗透姿势分享
    ESP8266 显示实时天气信息
    静态链接学习之 ELF 文件 DIY
    ROP-Tamu CTF 2018-pwn5
  • 原文地址:https://www.cnblogs.com/418ks/p/11638732.html
Copyright © 2011-2022 走看看