1. 程式人生 > >UDP伺服器的簡單實現

UDP伺服器的簡單實現

伺服器端:

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



#define ERR_EXIT(m) \
    do\
    {\
        perror(m);\
        exit(EXIT_FAILURE);\
    }while(0)

int main(int argc, char* argv[])
{
    if
(argc < 3) { printf("./server [addr] [port]\n"); exit(EXIT_SUCCESS); } int sock = socket(AF_INET, SOCK_DGRAM, 0); if(sock < 0) ERR_EXIT("socket"); struct sockaddr_in local; local.sin_family = AF_INET; local.sin_port = htons(atoi(argv[2])); local.sin_addr.s_addr = inet_addr(argv[1
]); if(bind(sock, (struct sockaddr*)&local, sizeof(local)) < 0) ERR_EXIT("bind"); char buf[1024]; struct sockaddr_in client; while(1) { buf[0] = 0; socklen_t len = sizeof(client); ssize_t s = recvfrom(sock, buf, sizeof(buf)-1, 0, (struct sockaddr*)&client, &len); buf[s] = 0
; if(strcmp(buf, "quit\n") == 0) { printf("client quit!\n"); continue; } if(s > 0) { printf("[%s:%d]: %s", inet_ntoa(client.sin_addr), ntohs(client.sin_port), buf); sendto(sock, buf, strlen(buf), 0, (struct sockaddr*)&client, sizeof(client)); } } return 0; }

客戶端:

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



#define ERR_EXIT(m) \
    do\
    {\
        perror(m);\
        exit(EXIT_FAILURE);\
    }while(0)

int main(int argc, char* argv[])
{
    if(argc < 3)
    {
        printf("./client [addr] [port]\n");
        exit(EXIT_SUCCESS);
    }
    int sock = socket(AF_INET, SOCK_DGRAM, 0);
    if(sock < 0)
        ERR_EXIT("socket");

    struct sockaddr_in server;
    server.sin_family = AF_INET;
    server.sin_port = htons(atoi(argv[2]));
    server.sin_addr.s_addr = inet_addr(argv[1]);

    char buf[1024];
    struct sockaddr_in peer;
    while(1)
    {
        buf[0] = 0;
        socklen_t len = sizeof(peer);
        write(1, "please input:>", strlen("please input:>"));
        ssize_t s = read(0, buf, sizeof(buf)-1);
        if(s > 0)
        {
            buf[s] = 0;
            sendto(sock, buf, strlen(buf), 0, (struct sockaddr*)&server, sizeof(server));
            if(strcmp(buf, "quit\n") == 0)
                exit(EXIT_SUCCESS);
            s = recvfrom(sock, buf, sizeof(buf)-1, 0, (struct sockaddr*)&peer, &len);
            if(s > 0)
            {
                buf[s] = 0;
                printf("server: %s", buf);

            }
        }
    }


    return 0;
}

通過UDP伺服器端和客戶端程式,可在區域網內進行對話:
這裡寫圖片描述
由於條件有限,因此這裡就在本機兩個終端演示。當兩臺主機處於同一個區域網下時,可用此程式實現兩臺主機的對話。

相關推薦

【網路】UDP伺服器實現

UDP伺服器實現的基本步驟 (1)利用socket函式建立套接字 (2)伺服器用bind進行IP和埠號的繫結 (3)不需要設定監聽狀態 (4)繫結後直接讀寫 相關函式 recvfrom 作用 用來資料

Linux 下c語言ftp伺服器簡單實現

     這個程式轉載自http://aijiekj.blog.163.com/blog/static/12986678920112321853230/ 原來的程式沒有註釋,最近這段時間在學習網路程式設計這塊,就在網上找了個程式來學習,第一次找的程式下載下來後,編譯沒通過,

[原創]直播伺服器簡單實現 http_flv和hls 內網直播桌面

注意:不支援xp系統,啟動失敗請先安裝dx11。win10的視訊流可能會是黑屏,需要選擇low api。直播都不陌生了,如今主流的協議分析的對比圖,個人見解。協議httpflvrtmphlsdash傳輸方式http流tcp流httphttp視訊封裝格式flvflv tagTs

3.網路程式設計-tcp的伺服器簡單實現

#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019/1/13 22:03 # @Author : ChenAdong # @email : [email protected] # 實現tcp伺服

直播伺服器簡單實現 http_flv和hls 內網直播桌面

直播都不陌生了,如今主流的協議分析的對比圖,個人見解。 協議 httpflv rtmp hls dash 傳輸層 http流 tcp流 http http 視訊格式 flv flv tag Ts檔案 Mp4 3gp

UDP伺服器簡單實現

伺服器端: #include <stdio.h> #include <stdlib.h> #include <sys/socket.h> #include &l

實現簡單UDP伺服器客戶端模型

UDP是無連線的,在資料的傳送之前不需要連線,只需要知道要發資料給誰,然後將資料發出即可,可以直接接收到其他人發來的資料,不必呼叫listen()和accept()函式。所以UDP中建立好套接字後,就可以直接進行資料的傳輸。 基於UDP的接收和傳送函式: #includ

Linux C UDP Socket實現客戶與伺服器簡單通訊

在linux平臺下用c語言udp協議實現客戶與伺服器的簡單通訊與封裝的實現 一、伺服器端 1、新建CreateServer.c和CreateServer.h檔案,伺服器的建立程式碼在此實現,程式中封裝了建立TcpSocket和UdpSocket伺服器的方法,

python socket實現簡單的(TCP/UDP)伺服器/客戶端

1、建立TCP服務端 # -*- coding: utf-8 -*- from socket import * from time import ctime HOST = 'lo

【網路】實現簡單的TCP、UDP伺服器、TCP多程序/多執行緒伺服器

1.0 一個簡單的TCP伺服器(只服務一個客戶端) 先看程式碼如下: server.c #include<stdio.h> #include<stdlib.h> #include<string.h> #includ

極速搭建RTMP直播流伺服器+webapp (vue) 簡單實現直播效果

  在嘗試使用webRTC實現webapp直播失敗後,轉移思路開始另外尋找可行的解決方案。在網頁上嘗試使用webRTC實現視訊的直播與看直播,在谷歌瀏覽器以及safari瀏覽器上測試是可行的。但是基於基座打包為webapp後不行,所以直播的話建議還是原生的好。HBuilder自帶的H5+有提供了原生

socket通訊:客戶端和伺服器簡單實現

什麼是socket? socket最開始的含義是一個地址和埠對(ip, port)。Socket又稱"套接字",應用程式通常通過"套接字"向網路發出請求或者應答網路請求。 socket地址API:它唯一的表示了使用tcp通訊的一端,也可以將其理解成socket地址。 socket

Android中MQTT的簡單實現(只是連線到伺服器,未實現傳送、接受資訊)

1.新增mqtt包到gradle.build a.在project的gradle.build中新增地址(P:我下載的參考例子是不用新增的,但是我自己寫的時候不新增就編譯不過去) allprojects { repositories { google()

搭建linux伺服器叢集,簡單實現,負載均衡,動靜分離,資料主從複製,分散式快取,共享session回話。

負載均衡方案: nignx  應用層負載均衡      優點:配置簡單 缺點:均衡效能一般 有流量消耗  基於反向代理 LVS    網路層負載均衡 優點:配置複雜 缺點:作

使用jsp實現表單與伺服器簡單互動

<!DOCTYPE html> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <

UDP網路程式設計簡單實現

由於最近編寫的遊戲涉及到了網路程式設計這塊,所以特意記錄下。 UDP簡介 UDP協議的全稱是使用者資料報,在網路中它與TCP協議一樣用於處理資料報。在OSI模型中,UDP位於第四層——傳輸層,處於IP協議額上一層。UDP有不提供資料報分組、組裝以及不能對資料報排序的缺點。當報文傳送之後,是無

網路程式設計之:TCP伺服器簡單實現

說到TCP伺服器,就不得不提socket程式設計,我們知道,在TCP/IP協議中,“IP地址+TCP或UDP埠號”唯一標識⽹絡通訊中的唯一一個程序,“IP地址+埠號”就稱為socket。 在TCP協

公鑰和私鑰的含義,以及java客戶端和伺服器之間進行安全加解密的簡單實現

所謂公鑰和私鑰,一般是指在一個伺服器中,每個伺服器各自有自己的公鑰和私鑰,私鑰絕對保密,不可洩露,而公鑰會提供給可以被訪問的伺服器知曉。 如果serverA和serverB進行資料互動 那麼ServerA會知道B的公鑰 在傳送資料時 資料內容使用B的公鑰加密,傳送給B 數字

golang簡單實現一個基於TLS/SSL的 TCP伺服器和客戶端

本篇文章介紹一下使用TLS/SSL建立安全的TCP通訊,首先我們要準備一個數字證書和一個金鑰關於如何產生金鑰,請看下面文章: Author: 嶽東衛 Email: [email pro

C#網路程式設計系列文章(八)之UdpClient實現同步UDP伺服器

原創性宣告 本文作者:小竹zz 本文地址http://blog.csdn.net/zhujunxxxxx/article/details/44258719 轉載請註明出處 文章系列目錄 本文介紹 UdpClient 類在同步阻塞模式中為傳送和接收無連線的 U