C/C++网络编程:TCP基础编程

C/C++网络编程:TCP基础编程

  • TCP Server(Linux)demo

1.创建套接字用于监听
2.绑定端口
3.监听端口
4.接收请求连接的套接字
5.收发消息

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

#define CHECK_POINT(x, y) {
      
      if((x) < 0){
      
      printf("%s error!\n", y);}}

typedef struct sockaddr sockaddr;
typedef struct sockaddr_in sockaddr_in;
const char * ip = "127.0.0.1";
const uint16_t port = 39000;

int main()
{
    
    
    int sock, ret;
    sockaddr_in addr, peer;

    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = inet_addr(ip);
    addr.sin_port = htons(39000);

    sock = socket(AF_INET, SOCK_STREAM, 0);
    
    ret = bind(sock, (sockaddr *)&addr, sizeof(addr));
    CHECK_POINT(ret, "bind");

    ret = listen(sock, 5);
    CHECK_POINT(ret, "listen");

    printf("TCP Server Running...\n");

    while(true)
    {
    
    
        socklen_t peer_len = sizeof(peer);
        int peer_sock = accept(sock, (sockaddr *)&peer, &peer_len);

        char * peer_ip = inet_ntoa(peer.sin_addr);
        uint16_t peer_port = ntohs(peer.sin_port);

        printf("accept from %s:%d connection...\n", peer_ip, peer_port);

        char * buf = new char[1024];
        ret = recv(peer_sock, buf, sizeof(buf), 0);
        CHECK_POINT(ret, "recv");

        printf("message : %s ...\n", buf);

        ret = send(peer_sock, "OK", 3, 0);
        CHECK_POINT(ret, "send");
    }

    return 0;
}
  • TCP Client(Linux)demo

1.创建请求连接的套接字
2.发起连接
3.收发消息

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

#define CHECK_POINT(x, y) {
      
      if((x) < 0){
      
      printf("%s error!\n", y);}}

typedef struct sockaddr sockaddr;
typedef struct sockaddr_in sockaddr_in;
const char * ip = "127.0.0.1";
const ushort port = 39000;

int main()
{
    
    
    int sock, ret;
    sockaddr_in addr;

    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = inet_addr(ip);
    addr.sin_port = htons(port);

    sock = socket(AF_INET, SOCK_STREAM, 0);

    ret = connect(sock, (sockaddr *)&addr, sizeof(addr));
    CHECK_POINT(ret, "connect");

    printf("connect to %s:%d successful ...\n", ip, port);

    ret = send(sock, "Hello", 6, 0);
    CHECK_POINT(ret, "send");

    char * buf = new char[1024];
    ret = recv(sock, buf, sizeof(buf), 0);
    CHECK_POINT(ret, "recv");

    printf("message : %s ...\n", buf);
    return 0;
}
  • TCP Client(Windows)demo
#include <stdio.h>
// #include <sys/socket.h>
// #include <netinet/in.h>
// #include <arpa/inet.h>
#include <winsock2.h>
#include <unistd.h>

#define CHECK_POINT(x, y) {
      
      if((x) < 0){
      
      printf("%s error!\n", y);}}

typedef struct sockaddr sockaddr;
typedef struct sockaddr_in sockaddr_in;
const char * ip = "127.0.0.1";
const USHORT port = 39000;

int main()
{
    
    
    int sock, ret;
    sockaddr_in addr;

    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = inet_addr(ip);
    addr.sin_port = htons(port);

    WSADATA wsaData;
    if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
        printf("WSAStartup error!\n");

    sock = socket(AF_INET, SOCK_STREAM, 0);

    ret = connect(sock, (sockaddr *)&addr, sizeof(addr));
    CHECK_POINT(ret, "connect");

    printf("connect to %s:%d successful ...\n", ip, port);

    ret = send(sock, "Hello", 6, 0);
    CHECK_POINT(ret, "send");

    char * buf = new char[1024];
    ret = recv(sock, buf, sizeof(buf), 0);
    CHECK_POINT(ret, "recv");

    printf("message : %s ...\n", buf);
    return 0;
}


  • UDP Server(Linux)demo

1.创建套接字
2.绑定端口
3.收发消息

#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

#define CHECK_POINT(x, y) {
      
      if((x) < 0){
      
      printf("%s error!\n", y);}}

typedef struct sockaddr sockaddr;
typedef struct sockaddr_in sockaddr_in;
const char * ip = "127.0.0.1";
const uint16_t port = 39000;

int main()
{
    
    
    int sock, ret;
    sockaddr_in addr, peer;

    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = inet_addr(ip);
    addr.sin_port = htons(port);

    sock = socket(AF_INET, SOCK_DGRAM, 0);

    ret = bind(sock, (sockaddr *)&addr, sizeof(addr));
    CHECK_POINT(ret, "bind");

    printf("UDP Server Running...\n");

    while(true)
    {
    
    
        char * buf = new char[1024];

        socklen_t len = sizeof(peer);
        ret = recvfrom(sock, buf, sizeof(buf) - 1, 0, (sockaddr *)&peer, &len);
        CHECK_POINT(ret, "recvfrom");
        
        char * peer_ip = inet_ntoa(peer.sin_addr);
        uint16_t peer_port = ntohs(peer.sin_port);

        printf("recv from %s:%d message : %s ...\n", peer_ip, peer_port, buf);

        ret = sendto(sock, "OK", 3, 0, (sockaddr *)&peer, sizeof(peer));
        CHECK_POINT(ret, "sendto");
    }
    return 0;
}
  • UDP Client(Linux)demo

1.创建套接字
2.收发消息

#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

#define CHECK_POINT(x, y) {
      
      if((x) < 0){
      
      printf("%s error!\n", y);}}

typedef struct sockaddr sockaddr;
typedef struct sockaddr_in sockaddr_in;
const char * ip = "127.0.0.1";
const uint16_t port = 39000;

int main()
{
    
    
    int sock, ret;
    sockaddr_in addr, peer;

    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = inet_addr(ip);
    addr.sin_port = htons(port);

    sock = socket(AF_INET, SOCK_DGRAM, 0);

    ret = sendto(sock, "Hello", 6, 0, (sockaddr *)&addr, sizeof(addr));
    CHECK_POINT(ret, "sendto");

    char * buf = new char[1024];

    socklen_t len = sizeof(peer);
    ret = recvfrom(sock, buf, sizeof(buf) - 1, 0, (sockaddr *)&peer, &len);
    CHECK_POINT(ret, "recvfrom");

    char * peer_ip = inet_ntoa(peer.sin_addr);
    uint16_t peer_port = ntohs(peer.sin_port);

    printf("recv from %s:%d message : %s ...\n", peer_ip, peer_port, buf);
    return 0;
}
  • UDP Client(Windows)demo
#include <stdio.h>
// #include <sys/socket.h>
// #include <netinet/in.h>
// #include <arpa/inet.h>
#include <winsock2.h>
#include <unistd.h>

#define CHECK_POINT(x, y) {
      
      if((x) < 0){
      
      printf("%s error!\n", y);}}

typedef struct sockaddr sockaddr;
typedef struct sockaddr_in sockaddr_in;
const char * ip = "127.0.0.1";
const USHORT port = 39000;

int main()
{
    
    
    int sock, ret;
    sockaddr_in addr, peer;

    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = inet_addr(ip);
    addr.sin_port = htons(port);

    WSADATA wsaData;
    if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
        printf("WSAStartup error!\n");

    sock = socket(AF_INET, SOCK_DGRAM, 0);

    ret = sendto(sock, "Hello", 6, 0, (sockaddr *)&addr, sizeof(addr));
    CHECK_POINT(ret, "sendto");

    char * buf = new char[1024];

    int len = sizeof(peer);
    ret = recvfrom(sock, buf, sizeof(buf) - 1, 0, (sockaddr *)&peer, &len);
    CHECK_POINT(ret, "recvfrom");

    char * peer_ip = inet_ntoa(peer.sin_addr);
    USHORT peer_port = ntohs(peer.sin_port);

    printf("recv from %s:%d message : %s ...\n", peer_ip, peer_port, buf);
    return 0;
}

Guess you like

Origin blog.csdn.net/qq_41245381/article/details/121359874