Linux下使用TCP/IP实现网络通讯

TCP通讯服务器端步骤:

  1. 创建socket,
    调用socket函数,创建一个套接字lfd
  2. 绑定bind
    用bind函数,讲lfd与地址号和端口号进行绑定
  3. 监听listen
    使用listen函数讲套接字设为监听模式,等待客户端连接
  4. 接受accept
    accept接受到客户端连接,返回一个新的套接字cfd,然后lfd继续监听(并发的时候使用)
  5. 读read
    通过read函数将客户端传过来的消息读出
  6. 回发write
    通过write函数返回消息。(此时read,write一直循环来进行通讯)
  7. 关闭close
    close即将创建的套接字关闭

客户端步骤:

  1. 创建socket
    调用socket函数,创建一个套接字cfd
  2. 链接connect
    使用connect函数将cfd与某个ip和端口号对应的服务器进行绑定
  3. 发送write
  4. 读read
  5. 关闭close

主要就是通过这几个步骤来进行运作。至于更多的详细可以看别的博客,我这里就简单讲一下

服务器端代码:

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

using namespace std;

#define IP "127.0.0.1"
#define PORT 6666
#define BUFSIZE 1024
int main()
{
        int lfd, cfd;
        struct sockaddr_in serv_addr, clie_addr;
        socklen_t clie_addr_len;
        char buf[BUFSIZE],clie_IP[BUFSIZE];
        int n;

        lfd = socket(AF_INET, SOCK_STREAM, 0);              //创建一个套接字

        serv_addr.sin_family = AF_INET;         //所选用的IP地址的类型
        serv_addr.sin_port = htons(PORT);            //将端口号转化为网络字节序
        serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);     //将IP转化为网络字节序:inaddr_any会自动获取

        bind(lfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr));       //进行绑定

        listen(lfd,128);         //设置一个上限值,建立连接的最大数

        clie_addr_len = sizeof(clie_addr);
        cfd = accept(lfd, (struct sockaddr *)&clie_addr, &clie_addr_len);        //对当前线>程进行阻塞,等待客户端进行连接
        if(cfd != 0 )
        {
                cout<<"IP:"<

客户端代码:

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

using namespace std;

#define IP "127.0.0.1"
#define PORT 6666
#define BUFSIZE 1024

int main()
{
        int cfd;
        struct sockaddr_in serv_addr;
        socklen_t serv_addr_len;
        char buf[BUFSIZE];
        int n;

        cfd = socket(AF_INET, SOCK_STREAM, 0);

        memset(&serv_addr, 0, sizeof(serv_addr));
        serv_addr.sin_family = AF_INET;
        serv_addr.sin_port = htons(PORT);
        inet_pton(AF_INET, IP, &serv_addr.sin_addr.s_addr);

        connect(cfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr));

        while(1){
                memset(buf,'\0',sizeof(buf));   //把数组设置为空
                cout<<"将要发送的消息:";
                cin>>buf;
                cout<<"接受到服务器端消息:";
                write(cfd, buf, strlen(buf));
                n=read(cfd, buf, sizeof(buf));
                cout<

 

你可能感兴趣的:(Linux,网络,socket,linux,网络通信,c++)