Linux中socket實現基本通信

/*untili.h*/
#ifndef _UTILI_H
#define _UTILI_H

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

#define SERVER_PORT 8080
#define SERVER_IP "127.0.0.1"//沒有網卡此地址也可以用 本地環回地址
#define LIST_QUEUE_SIZE 5
#define BUFFER_SIZE 256


#endif


#include"utili.h"

int main()
{
     int sockSer = socket(AF_INET,SOCK_STREAM,0); //服務器的套接字號
     if(sockSer == -1)
     {
         perror("socket");
         exit(1);
     }
     struct sockaddr_in addrSer,addrCli;
     addrSer.sin_family = AF_INET;
     addrSer.sin_port = htons(SERVER_PORT);//htons()函數 host主機到達網絡的字集序轉換,host to network short
     addrSer.sin_addr.s_addr = inet_addr(SERVER_IP);//ip地址
    
     socklen_t len = sizeof(struct sockaddr);
     int ret = bind(sockSer,(struct sockaddr*)&addrSer,len);
     if(ret == -1)
     {
         perror("bind");
         exit(1);
     }
     /*監聽*/
    ret = listen(sockSer , LIST_QUEUE_SIZE);
    if(ret == -1)
    {
        perror("listen");
        exit(1);
    }
    /*接受連接*/
    int sockConn = accept(sockSer ,(struct sockaddr*)&addrCli , &len);
    if(sockConn == -1)
    {
        perror("Server accept Client Connect fail.\n");
        exit(1);
    }
    else
    {
        printf("Server accetp Client Connect Success.\n");
    }
    
    char sendbuf[BUFFER_SIZE];
    char recvbuf[BUFFER_SIZE];

    while(1)
    {
        printf("Ser:>");
        scanf("%s",sendbuf);
        send(sockConn , sendbuf , strlen(sendbuf)+1,0);
        recv(sockConn,recvbuf,BUFFER_SIZE,0);
        printf("Cli:>%s\n",recvbuf);
    }
    
    close(sockSer);
    return 0;
}



  

#include"utili.h"
int main()
{
    int sockCli = socket(AF_INET , SOCK_STREAM , 0);
    if(sockCli == -1)
    {
        perror("socket");
        exit(1);
    }

    struct sockaddr_in addrSer;
    addrSer.sin_family = AF_INET;
    addrSer.sin_port = htons(SERVER_PORT);
    addrSer.sin_addr.s_addr = inet_addr(SERVER_IP);

    socklen_t len = sizeof(struct sockaddr);
    int ret = connect (sockCli,(struct sockaddr*)&addrSer,len);
    if(ret == -1)
    {
        perror("connect");
        exit(1);
    }
    else
    {
        printf("Client Connect Server Success.\n");
    }
    char sendbuf[BUFFER_SIZE];
    char recvbuf[BUFFER_SIZE];
    while(1)
    {
        recv(sockCli,recvbuf,BUFFER_SIZE,0);
        printf("Ser:>%s\n",recvbuf);
        printf("Cli:>");
        scanf("%s" , sendbuf);
        send(sockCli , sendbuf , strlen(sendbuf)+1,0);
    }
    close(sockCli);
    return 0;
}


發佈了46 篇原創文章 · 獲贊 74 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章