C 之網路程式設計

2021-05-22 22:46:05 字數 2907 閱讀 1800

1.tcp協議

(1)面向連線:兩個遠端主機(或者叫程序,因為實際上遠端通訊是程序之間的通訊,而程序則是執行中的 程式),必須首先進行乙個握手過程,確認連線成功,之後才能傳輸實際的資料。

(2)全雙工:兩個主機上的程序(比如程序a、程序b),一旦建立好連線,那麼資料就既可以由a流向b,也可以由b流向a。

(3)點對點:乙個tcp連線總是兩者之間的,在傳送中,通過乙個連線將資料發給多個接收方是不可能的。

(4)可靠的資料傳輸:連線建立後,資料的傳送一定能夠到達,並且是有序的。

2.伺服器對客戶端的服務能力:

(1)處理同一客戶端的乙個請求。

(2)處理同一客戶端的多個請求。

(3)處理多個客戶端的乙個請求。

(4)處理多個客戶端的多個請求。

3.資料傳輸的方式

(1)流資料(tcp)

(2)資料報(udp)

4.資料的接收與傳送方式:

(1)同步傳輸

(2)非同步傳輸

5.所用到的類

(1)socket 位於:system.net.sockets

(2)tcplistener , tcpclient :位於system.net.sockets。這兩個類是對socket 的包裝。

(3)ipaddress ,ipendpoint。位於:system.net。

6.例項:

客戶端傳送乙個字串給伺服器,伺服器將小寫改為大寫,回發給客戶端。

伺服器:

using system;

using system.collections.generic;

using system.text;

using system.net;

using system.net.sockets;

class server

static void main(string args)

//用於處理乙個連線

private  void accepthandler(tcpclient remoteclient)

-->", remoteclient.client.localendpoint,

remoteclient.client.remoteendpoint);

networkstream streamtoclient = remoteclient.getstream(); //獲取網路的資料流

string msg = receivemsg(streamtoclient); //接收資訊

sendmsg(streamtoclient, msg); //向網路回發資訊

}//用於接收資訊的函式

private  string receivemsg(networkstream streamtoclient)

bytes", bytes);

string msg = encoding.unicode.getstring(buffer, 0, bytes); //將收到的資訊解碼成字串

console.writeline("from client receive: ", msg); //輸出

return msg;

}//用於回發資訊的函式

private void sendmsg(networkstream streamtoclient,string msg)

//此方法用於阻塞程式

private  void blocked()

while (key != consolekey.q);

}客戶端:

using system;

using system.collections.generic;

using system.text;

using system.net;

using system.net.sockets;

class client

-->", client.client.localendpoint,

client.client.remoteendpoint);

}static void main(string args)

//傳送資訊

private void sendmsg(networkstream streamtoserver,string msg)

", msg); //顯示傳送的資訊

}//接收資訊

private void receivemsg(networkstream streamtoserver)

", receivemsg); //顯示接收到的字串

}///

/// 用於阻塞程式的方法

///

private void blocked()

while (key != consolekey.q);}}

本例子是利用同步方法實現,也就是說當客戶端沒去連線伺服器時,伺服器僅能處於等待連線,且只能處理乙個客戶的乙個請求。

如果要處理同一客戶的多個請求只需:在接收和傳送加上while語句。

伺服器:

private  void accepthandler(tcpclient remoteclient)

-->", remoteclient.client.localendpoint,

remoteclient.client.remoteendpoint);

networkstream streamtoclient = remoteclient.getstream(); //獲取網路的資料流

dowhile (true);

客戶端:

static void main(string args)

while (true);

}同理只要再加上while語句,及改變位置,便可實現:

(2)處理同一客戶端的多個請求。

(3)處理多個客戶端的乙個請求。

(4)處理多個客戶端的多個請求。

C 之網路程式設計《一》

c 網路程式設計之初體驗 win socket 程式設計開始 test.cpp 定義控制台應用程式的入口點。include stdafx.h include include pragma comment lib,ws2 32.lib void initsocket byte,byte 申明方法 in...

c 學習之Socket網路程式設計

我是新手以前沒寫過部落格 希望大家勿噴,在編寫socket的時候需要匯入system.net.socket命名空間。利用該類我們可以直接編寫socket的客戶端和服務的的程式了,這裡我們只講tpc協議下的socket程式設計。tcp socket連線的過程可以簡單的分為 服務端監聽 客戶端請求 建立...

C 網路程式設計

首先我們解釋一下在網路程式設計時候,經常遇到的幾個概念 同步 synchronous 非同步 asynchronous 阻塞 block 和非阻塞 unblock 所謂同步方式,就是傳送方傳送資料報以後,不等接受方響應,就接著傳送下乙個資料報。非同步方式就是當傳送方傳送乙個資料報以後,一直等到接受方...