Linux socket编程

陆续开始复习一下网络知识,把以前的东西全部捡回去

服务端:

/*
 * File:   main.cpp
 * Author: ziqiao
 *
 * Created on 2011年4月15日, 上午11:06
 */

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define SERVPORT 3333 /* Server listeing prot */
#define BACKLOG 10 /* maximum servering size */

using namespace std;

/*
 *
 */
int main(int argc, char** argv) {
    int sock_fd; // listening socket
    int client_fd; // client socket
    struct sockaddr_in my_addr;
    struct sockaddr_in remote_addr;
    size_t sin_size;
    if ((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { // TCP
        perror("socket creatation error");
        exit(1);
    }

    bzero(&my_addr, sizeof(my_addr));
    my_addr.sin_family = AF_INET;
    my_addr.sin_port = htons(SERVPORT);
    my_addr.sin_addr.s_addr = htons(INADDR_ANY);
    if (bind(sock_fd, (struct sockaddr *)&my_addr, sizeof (my_addr)) == -1) { // 监听端口
        perror("bind error");
        cout << errno << endl;
        exit(1);
    }
    if (listen(sock_fd, BACKLOG) == -1) { // 监听
        perror("listen error");
        exit(1);
    }
    while (1) {
        sin_size = sizeof(struct sockaddr_in);
        if ((client_fd = accept(sock_fd, (struct sockaddr *)&remote_addr, &sin_size)) == -1) {
            perror("accept error");
            continue;
        }
        cout << "received a connection from " << inet_ntoa(remote_addr.sin_addr) << endl;
        if (!fork()) { // create subprocess to handle
            if (send(client_fd, "Hello, you are connectedn", 26, 0) == -1)
                perror("send error");
            close(client_fd);
            exit(0);
        }
    }
    close(sock_fd);
    return 0;
}

客户端:

/*
 * File:   main.cpp
 * Author: ziqiao
 *
 * Created on 2011年4月15日, 下午5:02
 */

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define SERVPORT 3333 /* Server listeing prot */

using namespace std;

/*
 *
 */
int main(int argc, char** argv) {
    int sock_fd; // socket
    struct sockaddr_in remote_addr;
    int len;
    char buf[1024];
    if ((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { // TCP
        perror("socket creatation error");
        exit(1);
    }

    bzero(&remote_addr, sizeof(remote_addr));
    remote_addr.sin_family = AF_INET;
    remote_addr.sin_port = htons(SERVPORT);
    remote_addr.sin_addr.s_addr = htons(0xFF000000);

    if ((connect(sock_fd, (struct sockaddr*)&remote_addr, sizeof(remote_addr))) == -1) {
        perror("connect error");
        exit(1);
    }
    if ((len = recv(sock_fd, buf, 1024, 0)) == -1) {
        perror("recv error");
        exit(1);
    }
    buf [len] = 0;
    cout << "Received: " << buf << endl;

    close(sock_fd);
    return 0;
}

posted on 2011-04-15 13:02  小橋流水  阅读(141)  评论(0编辑  收藏  举报

导航