1. 程式人生 > >MingGW 內外中編寫程式進行udp 通訊

MingGW 內外中編寫程式進行udp 通訊

首先用python 編寫一個server

import socket  
  
address = ('127.0.0.1', 21567)  
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  
s.bind(address)  
  
while True:  
    data, addr = s.recvfrom(2048)  
    if not data:  
        print "client has exist"  
        break  
    print "received:", data, "from", addr  
  
s.close()

而又用c編寫一個client
#include<stdio.h>
#include<winsock2.h>
 
#pragma comment(lib,"ws2_32.lib") //Winsock Library
 
#define SERVER "127.0.0.1"  //ip address of udp server
#define BUFLEN 512  //Max length of buffer
#define PORT 21567   //The port on which to listen for incoming data
 
int main(void)
{
    struct sockaddr_in si_other;
    int s, slen=sizeof(si_other);
    char buf[BUFLEN];
    char message[BUFLEN];
    WSADATA wsa;
 
    //Initialise winsock
    printf("\nInitialising Winsock...");
    if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
    {
        printf("Failed. Error Code : %d",WSAGetLastError());
        exit(EXIT_FAILURE);
    }
    printf("Initialised.\n");
     
    //create socket
    if ( (s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == SOCKET_ERROR)
    {
        printf("socket() failed with error code : %d" , WSAGetLastError());
        exit(EXIT_FAILURE);
    }
     
    //setup address structure
    memset((char *) &si_other, 0, sizeof(si_other));
    si_other.sin_family = AF_INET;
    si_other.sin_port = htons(PORT);
    si_other.sin_addr.S_un.S_addr = inet_addr(SERVER);
     
    //start communication
    while(1)
    {
        printf("Enter message : ");
        gets(message);
         
        //send the message
        if (sendto(s, message, strlen(message) , 0 , (struct sockaddr *) &si_other, slen) == SOCKET_ERROR)
        {
            printf("sendto() failed with error code : %d" , WSAGetLastError());
            exit(EXIT_FAILURE);
        }
         
        //receive a reply and print it
        //clear the buffer by filling null, it might have previously received data
        memset(buf,'\0', BUFLEN);
        //try to receive some data, this is a blocking call
        if (recvfrom(s, buf, BUFLEN, 0, (struct sockaddr *) &si_other, &slen) == SOCKET_ERROR)
        {
            printf("recvfrom() failed with error code : %d" , WSAGetLastError());
            exit(EXIT_FAILURE);
        }
         
        puts(buf);
    }
 
    closesocket(s);
    WSACleanup();
 
    return 0;
}
用下面的編譯
gcc winclient.c -lws2_32

而後就可以運行了。

相關推薦

MingGW 內外編寫程式進行udp 通訊

首先用python 編寫一個server import socket address = ('127.0.0.1', 21567) s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.bind(ad

python v3.3.2使用subprocess模組與其它程式進行管道通訊

下面是python指令碼sup.py: import subprocess p = subprocess.Popen("test.exe", stdin = subprocess.PIPE,stdout = subprocess.PIPE, stderr = subpr

Android開啟熱點進行UDP通訊的坑

1、寫在前面: 2018年的第一篇文章,最近在使用UDP協議進行硬體通訊,大家都知道UDP協議通訊必須在同一個區域網內,但是每個使用者家的wifi都是不一樣的,硬體裝置是無法只值連線到使用者家的wifi的。所以為了解決這個問題,提出一個思路,讓手機開啟熱點,然

unity3D使用Socket進行資料通訊(二)

上一篇部落格主要介紹了使用socket搭建服務端和客戶端程式,這一篇來說說socket的資料傳輸,我們使用socket的目的是解決點對點之間的資料傳輸,之前提到了socket中一個重要的概念:埠。而socket傳輸資料的方式就是埠與埠之間以流(stream)的方式傳輸資料,s

Java的TCP、UDP通訊

文章目錄TCP建立伺服器建立客戶端UDP小結 TCP TCP 協議提供面向連線的服務,通過它建立的是可靠地連線。Java 為 TCP 協議提供了兩個類:Socke 類和 ServerSocket 類。

unity3D使用Socket進行資料通訊(三)

          今天跟大家繼續學習下socket,由於最近有個招標引數需要給之前的一款產品做教師端以及後臺資料庫部分,忙了將近兩個禮拜,今天剛釋出了,就繼續我們的socket通訊部分。          之前服務端一直在VS中去做,考慮到後面客戶端與伺服器一體化,就把服

vc++求助:直接在vc++6.0編寫程式,編譯通過,連接出錯,但是把原始檔拷到另一個工程去,就行了。why??

 我的原始碼如下: c1.h #include <string.h>#include <ctype.h>#include <malloc.h>#include <limits.h>#include <stdio.h>

如何在Unity程式進行 Android 真機斷點除錯?

在百度上搜索了很久都沒有找到如何在Android上面真機斷點除錯的方法,沒辦法只能科學上網到谷歌上去找,終於在Unity官網上找到了Android真機斷點除錯的辦法。1.首先在手機上開啟USB除錯功能,並安裝驅動(這一步很多手機助手都可以完成)。2.用USB電纜連線手機和電腦。3.確保手機和電腦在一個區域

MFC利用CSocket實現UDP通訊

     原始碼請到此處下載。 基本介面如下:                          UDP通訊時雙方地位是對等的,不用像TCP那樣要在伺服器端設定一個監聽Socket。      第一

C語言:利用指標編寫程式,定義一個3行3列的二維陣列,並在程式對其進行賦值,陣列元素的型別不限,輸出該二維陣列以及各行的均值

題目來源:大工慕課 連結 作者:Caleb Sung 題目要求 利用指標編寫程式,定義一個3行3列的二維陣列,並在程式中對其進行賦值,陣列元素的型別不限,輸出該二維陣列以及各行的均值,各行

使用C#的Socket進行通訊

err comm bind 客戶端 ipaddress odi nac rgs tel class Program { static void Main(string[] args) { Socket serv

編寫程式數一下 1到 100 的所有整數出現多少次數字9(C語言)

#include <stdio.h> int main() { int i = 0; int count = 0; for (i = 1; i <= 100; i++) { if (i % 10 == 9) { count++; } if (i

Java UDP通訊聊天程式

 編寫兩個新的VC程式,完成以下功能:  一個程式為服務端,建立UDP服務端套接字。  另外一個程式為客戶端,建立UDP客戶端套接字。  這兩個新程式可以互聯,完成一個基於TCP/IP網路的文字聊天程式。 因為TCP需要三次握手,所以只能一來一回的實現聊天程式,而UDP可以只負責

編寫程式,在一非遞減的順序表L,刪除所有值相等的多餘元素。要求時間複雜度O(n),空間複雜度為O(1)

翠花上程式碼: Status delExcrescentValue(SeqList &S){ int flag = 0,val = S.elem[0];//記錄值不等的下標 //printf("%d\n",S.elem[0]); for(int i = 1;i

#小程式#小程式父子元件間的通訊與事件

子 - Component  child.json { "component": true, "usingComponents": {} } child.wxml <view class='template-child'> <bloc

如何實現windows系統與虛擬機器linux系統間的通訊,使linux系統能夠上網,兩個系統間可以進行檔案互傳。

       我使用的虛擬機器軟體為virtual box,系統為redhat 6.6,本機系統為win10旗艦版。當然,其他環境具體操作起來或許會有細微差別,但大體方向相同。        一、使虛擬機器系統能夠上

在Spark Shell編寫WordCount程式

Spark Shell是一個互動式的命令列,裡面可以寫Spark程式(Scala語言),也是一個客戶端,用於提交Spark程式 1.啟動Spark Shell bin/spark-shell  上邊是沒有指定Master地址的啟動方式,啟動後用的是spark的local模