C实现简单TCP的C/S模型(Linux & Mac OS系统)

Server:


#include <stdio.h>

#include <stdlib.h>

#include <sys/socket.h>

#include <unistd.h>//sleep();

#include <netinet/in.h>

#include <arpa/inet.h>


int main(int argc, const char * argv[]) {

    //Server Septs:

    /*

     1.创建socket

     2.循环监听

     3.创建线程处理数据

     */

    //创建流套接字:

    int sock;

    struct sockaddr_in in;

    if ((sock = socket(AF_INET,SOCK_STREAM,0)) == -1) {

        printf("创建原始套接字出错!\n");

        exit(1);//异常退出1/-1,正常退出0

    }

    //封装地址:(为本机地址)

    in.sin_addr.s_addr = inet_addr("0.0.0.0");

    in.sin_family = AF_INET;

    in.sin_port = htons(4396);

    //bind连接socket与ip:

    if (bind(sock, (struct sockaddr *)&in, sizeof(in)) != 0) {

        printf("bind error!\n");

        exit(1);

    }

    //监听:

    if (listen(sock, 5) != 0) {

        printf("listen error!\n");

        exit(1);

    }

    printf("Established!\n");

    

    struct sockaddr_in receiveAddr;

    socklen_t receiveAddrLen = sizeof(receiveAddr);

    while ((accept(sock, (struct sockaddr *)&receiveAddr, &receiveAddrLen)) != -1) {

        printf("来自 %s 的连接!\n",inet_ntoa(receiveAddr.sin_addr));

    }

    return 0;

}


Client:


#include <stdio.h>

#include <stdlib.h>

#include <sys/socket.h>

#include <arpa/inet.h>

#include <unistd.h>//close();

int main(int argc, const char * argv[]) {

    /*Step:

     1.创建socket

     2.connect

     */

    int sockfd;

    struct sockaddr_in addr;

    if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {

        printf("创建原始套接字出错!\n");

        exit(1);//异常退出1/-1,正常退出0

    }

    //这两种方式都可以将char*类型的地址转换成网络字节序:

    addr.sin_addr.s_addr = inet_addr("127.0.0.1");

//    inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);

    addr.sin_family = AF_INET;

    addr.sin_port = htons(4396);

    if ((connect(sockfd, (struct sockaddr*)&addr, sizeof(addr))) != 0) {

        perror("connect");

        close(sockfd);

        exit(-1);

    }

    printf("Connected to server!\n");

    return 0;

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值