網絡通信簡單代碼(TCP)

服務器端程序實現步驟:
1.創建監聽套接字(買一部只能接電話的手機)
2.給套接字綁定(IP)地址(相當於給手機上號)
3.將套接字設置爲監聽狀態(開機,將手機設置爲待機)
4.接受客戶端連接請求(相當於接受來電請求)
5.收發數據(相互通信)
6.斷開連接(掛機)
456|456|456|456|456(可重複執行)
7.關閉監聽套接字(手機關機或飛行模式)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>

int main()
{
//買手機
    int socket_listen=socket(AF_INET,SOCK_STREAM,0);
//綁卡
    struct sockaddr_in myaddr;
    myaddr.sin_family=AF_INET;
    myaddr.sin_addr.s_addr=INADDR_ANY;
    myaddr.sin_port=htons(6666);

    if(-1==bind(socket_listen,(struct sockaddr*)&myaddr,sizeof(myaddr)))
    {
        perror("bind");
        exit(-1);
    }
//待機
    listen(socket_listen,5);
//接電話
    int socket_conn=accept(socket_listen,NULL,NULL);
//通話
    char buf[100];
    int ret;
    ret=recv(socket_conn,buf,sizeof(buf),0);
    if(ret>0)
    {
        buf[ret]='\0';
        printf("客戶端說:%s",buf);

        strcpy(buf,"已收到您的信息\n");
        send(socket_conn,buf,strlen(buf),0);
    }
    else
    {
        printf("連接已斷開");
    }
//關電話
    close(socket_conn);
//關手機
    close(socket_listen);
    return 0;
}

客戶端
1.創建流套接字(買手機)
2.綁定地址(買卡,可省略)
(如果不進行顯示綁定或綁定失敗,操作系統會隱式綁定,一般是較大數)
3.連接服務器 (呼叫)
4.收發數據(通話)
5.斷開連接(掛機)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>

int main(int argc,char** argv)
{
    if(3!=argc)
    {
        printf("參數有誤\n");
        exit(-1);
    }
//買手機
    int socket_conn=socket(AF_INET,SOCK_STREAM,0);
//綁卡
    struct sockaddr_in myaddr;
    myaddr.sin_family=AF_INET;
    myaddr.sin_addr.s_addr=INADDR_ANY;
    myaddr.sin_port=htons(1234);

    if(-1==bind(socket_conn,(struct sockaddr*)&myaddr,sizeof(myaddr)))
    {
        perror("bind");
        exit(-1);
    }
//打電話
    struct sockaddr_in ser_addr;
    ser_addr.sin_family=AF_INET;
    ser_addr.sin_addr.s_addr=inet_addr(argv[1]);
    ser_addr.sin_port=htons(atoi(argv[2]));

    if(-1==connect(socket_conn,(struct sockaddr*)&ser_addr,sizeof(ser_addr)))
    {
        perror("connect");
        exit(-1);
    }
//收發消息
    char buf[100];
    int ret;
    strcpy(buf,"cmz,1701\n");
    ret=send(socket_conn,buf,strlen(buf),0);
    if(ret>0)
    {
        ret=recv(socket_conn,buf,sizeof(buf),0);
        buf[ret]='\0';
        printf("服務器回覆說:%s",buf);
    }
    else
    {
        printf("連接已斷開\n");
    }
//掛電話
    close(socket_conn);


    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章