.NET技术之美-网络编程
概要
.NET框架提供了system.net.*的一系列網絡編程,其中system.net.socket主要提供低層TCP,UDP通信,system.Net高層下的通信HTTP,FTP,SMTP通信
1、面向連接的傳輸協議-TCP
什么是面向連接:首先必須要有一個握手過程,確認連接成功之后才能傳輸數據.
TCP最大的特點是全雙工:就是A與B交互,數據可以從A到B,也可以從B到A
點對點:只能是一對一不能一對多
2、套接字
套接字的兩個重要的屬性:發起連接的本地IP和端口號,遠程的IP地址和端口號
.NET框架中提供了system.net.sockets.socket類,兩個幫助類TcpClient和TcpListener
TcpListener持續對端口偵聽,如果發現對象,則會生成一個TcpClient對象來處理和發送消息,而且同時TcpListen還會同時監聽端口
2.1、server創建并監聽接口
console.writerine("server is running");ipaddress ip=new ipaddress.parse("192.168.0.100");TcpListen listerner=new TcpListern(ip,8500);listernen.start();console.writerline("start Listeing..");2.2、client創建連接和接口
console.writerline("Client is running"); TcpClient client=new TcpClient(); client.connect(ipaddress.parse("192.168.0.100"),8500);2.3、server端獲取客戶端連接狀態
console.writerine("server is running");ipaddress ip=new ipaddress.parse("192.168.0.100");TcpListen listerner=new TcpListern(ip,8500);listernen.start();console.writerline("start Listeing..");TcpClient remoteClient=listener.AcceptTcpClient();console.writerline("client connected!local:{0} <--Client:{1}",remoteClient.client.localendpoint,remoteClient.client.remoteendpoint)?
server端獲取多個客戶端的連接
while(true){TcpClient remoteClient=listener.AcceptTcpClient();console.writerline("client connected!local:{0} <--Client:{1}",remoteClient.client.localendpoint,remoteClient.client.remoteendpoint) }AcceptTcpClient()方法在沒有收到客戶端的連接的之前,不會向前持行
2.4、同步傳輸字符串
2.4.1、server端接收
.NET框架提供了TcpClient的getStream()方法獲取client連接server的流
const int buffersize=8192;console.writerine("server is running");ipaddress ip=new ipaddress.parse("192.168.0.100");TcpListen listerner=new TcpListern(ip,8500);listernen.start();console.writerline("start Listeing..");TcpClient remoteClient=listener.AcceptTcpClient();console.writerline("client connected!local:{0} <--Client:{1}",remoteClient.client.localendpoint,remoteClient.client.remoteendpoint) ////networkstream streamToClient=remoteClient.GetSream(); byte[] buff=new byte[buffersize]; int byteRead=streamToClient.Read(buffer,0,buffersize); string msg=encoding.unncode.getstring(buffer,0,bytesread);2.4.2、Client發送
同樣client需要發送消息,也需要獲取server端的流
networkstream streamToServert=client.GetSream(); byte[] buff=new byte[buffersize]; streamToClient.writer(buffer,0,buffersize);2.5、連接總結
1.不使用do/while,server中只用一個listener.accepttcpclient(),則server端可以出來來自一個client的請求
2.使用一個do/while,將listener.accepttcpclient(),TcpClient.GetStream().Read()方法都放在這個循環內,那么server可以處理多個client,但每個client只能處理一個請求
3.使用一個do/while,將listener.accepttcpclient(),TcpClient.GetStream().Read()方法都放在這個循環外,那么server可以處理一個client多個請求
轉載于:https://www.cnblogs.com/ilooking/p/4363081.html
總結
以上是生活随笔為你收集整理的.NET技术之美-网络编程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: zoj 3841 Cards
- 下一篇: WPF 3D:使用GeometryMod