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 所謂同步方式,就是傳送方傳送資料報以後,不等接受方響應,就接著傳送下乙個資料報。非同步方式就是當傳送方傳送乙個資料報以後,一直等到接受方...