socket简单练习

//以下代码,实现一个TCP socket练习,由客户端给服务器端发消息,服务器端接收信息。

//不好意思,功能有点变态:服务器启动后会监视是否有客户端来建立连接,如果有,则接收等待。客户端每启动一次就有且只有一次向服务器发消息的机会,输入消息,回车发送后就进程退出。

//功能虽然简单,但是也实现了基本的通信功能,如果结合我之前发的和线程相关的博客内容,再加上一点想象能力,我想要写一个功能强大的网络聊天程序是很有可能 滴。


//服务器端程序编写

#include <iostream>

using namespace std;
#include <cstdlib>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <netinet/in.h>


int main()
{
        int sd = socket(AF_INET, SOCK_STREAM, 0);
        if(sd == -1)cout << "socket create error" << endl,exit(-1);


        struct sockaddr_in addr = {};
        addr.sin_family = AF_INET;
        addr.sin_port = htons(22222);
        addr.sin_addr.s_addr = inet_addr("127.0.0.1");


        int res = bind(sd, (struct sockaddr*)&addr, sizeof(addr));
        if(res == -1)cout << "bind error" << endl,exit(-2);
        cout << "bind success" << endl;


        if(-1 == listen(sd,10))cout << "listen error" << endl,exit(-3);


        struct sockaddr_in c_addr = {};
        socklen_t len = sizeof c_addr;


        while(1)
        {
                cout << "start accept" << endl;
                int csd = accept(sd, (struct sockaddr*)&c_addr, &len);
                cout << "accept success" << endl;
                char buf[111] = {};
                cout << "recvd a message: ";
                recv(csd, buf, sizeof(buf), 0);
                cout << buf << endl;

        }


close(sd);

        return 0;

}


//客户端程序编写




#include <iostream>
using namespace std;
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <cstdlib>


int main()
{
        int sd = socket(AF_INET, SOCK_STREAM, 0);
        if(sd == -1)cout << "client socket create error" << endl,exit(-1);
        struct sockaddr_in addr = {};
        addr.sin_family = AF_INET;
        addr.sin_port = htons(22222);
        addr.sin_addr.s_addr = inet_addr("127.0.0.1");
        int res = connect(sd, (struct sockaddr*)&addr, sizeof(addr));
        if(res == -1)cout << "connect failed" << endl,exit(-2);


        cout << "start send messages" << endl;
        char buf[222] = {};
        cin.getline(buf,222);
        send(sd, buf, sizeof(buf), 0);


        close(sd);
        return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值