tcp
創(chuàng)新互聯(lián)主打移動網(wǎng)站、網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)站改版、網(wǎng)絡(luò)推廣、網(wǎng)站維護、主機域名、等互聯(lián)網(wǎng)信息服務,為各行業(yè)提供服務。在技術(shù)實力的保障下,我們?yōu)榭蛻舫兄Z穩(wěn)定,放心的服務,根據(jù)網(wǎng)站的內(nèi)容與功能再決定采用什么樣的設(shè)計。最后,要實現(xiàn)符合網(wǎng)站需求的內(nèi)容、功能與設(shè)計,我們還會規(guī)劃穩(wěn)定安全的技術(shù)方案做保障。
還是
udp?
tcp
的話
try
-
catch
就行了,因為
tcp
要求的是穩(wěn)定的連接,連接一斷開直接就
throw
exception
了。
udp
的話,因為它本身是無連接的協(xié)議,所以其實不存在斷開不斷開的,準確的說應該是超時。可以客戶端每隔一段時間向服務端發(fā)送個心跳包(隨便什么數(shù)據(jù)都行,只是證明客戶端還在線),服務端每隔一段時間檢測在線的客戶端列表,誰已經(jīng)很久沒發(fā)來心跳包了就證明它掉線了。
1.一般來說,要實現(xiàn)前后端分離,前端就需要開啟一個本地的服務器來運行自己的前端代碼,以此來模擬真實的線上環(huán)境,并且,也是為了更好的開發(fā)。因為你在實際開發(fā)中,你不可能要求每一個前端都去搭建一個java(php)環(huán)境,并且在java環(huán)境下開發(fā),這對于前端來說,學習成本太高了。
?2.但如果本地沒有開啟服務器的話,不僅無法模擬線上的環(huán)境,而且還面臨到了跨域的問題,因為你如果寫靜態(tài)的html頁面,直接在文件目錄下打開的話,你是無法發(fā)出ajax請求的(瀏覽器跨域的限制),因此,你需要在本地運行一個服務器,可是又不想搭建陌生而龐大的java環(huán)境,怎么辦法呢?nodejs正好解決了這個問題。在我們項目中,我們利用nodejs的express框架來開啟一個本地的服務器,然后利用nodejs的一個http-proxy-middleware插件將客戶端發(fā)往nodejs的請求轉(zhuǎn)發(fā)給真正的服務器,讓nodejs作為一個中間層。這樣,前端就可以無憂無慮的開發(fā)了
?3.由于前后端分離后,前端和后臺同時開發(fā)時,就可能遇到前端已經(jīng)開發(fā)好一個頁面了,可是卻等待后臺API接口的情況。比如說A是負責前端,B是負責后臺,A可能用了一周做好了基本的結(jié)構(gòu),并且需要API接口聯(lián)調(diào)后,才能繼續(xù)開發(fā),
?4.而此時B卻還沒有實現(xiàn)好所需要的接口,這種情況,怎么辦呢?在我們這個項目里,我們是通過了mock來提供一些假數(shù)據(jù),我們先規(guī)定好了API接口,設(shè)計出了一套API文檔,然后我們就可以通過API文檔,利用mock來返回一些假數(shù)據(jù),這樣就可以模擬發(fā)送API到接受響應的整一個過程,
?5.因此前端也不需要依賴于后端開發(fā)了,可以獨立開發(fā),等到后臺的API全部設(shè)計完之后,就可以比較快速的聯(lián)調(diào)。
服務端做數(shù)據(jù)的儲存/處理工作。
試想下用戶他的游戲等級是12級,
如果你不儲存在服務端而儲存在客戶端,用戶就可以像修改單機游戲一樣直接改成120級那不是亂套了。
服務端用戶觸碰不到服務端處理用戶升級或降級并記錄在數(shù)據(jù)庫中,用戶不可修改。
Socket類連接后 可以通過類中的 RemoteEndPoint 來獲取遠程IP和端口信息.
要注意的是.需要將它強制轉(zhuǎn)化為 IPEndPoint類型 然后通過 IPEndPoint.Address以及IPEndPoint.Port來獲取對應的IP及端口
例:
Dim REV_SCK As New Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)
'這里創(chuàng)建一個UDP Socket連接的實例 TCP也是一樣的
'省略SOCKET連接的代碼 當SOCKET連接成功后 可以用下面的語句獲取遠程信息
Dim IP as string ,Port as integer
'定義IP和Port變量 用來保存地址及端口
IP = IPAddress.Parse(CType(REV_SCK.RemoteEndPoint, IPEndPoint).Address.ToString())
Port = IPAddress.Parse(CType(REV_SCK.RemoteEndPoint, IPEndPoint).Port)
接收到客戶端數(shù)據(jù),處理完畢........
//返回信息給客戶端
string sendStr = "ok!Client send message successful!";
byte[] bs = Encoding.ASCII.GetBytes(sendStr);
client.Send(bs, bs.Length, 0);
//關(guān)閉套接字
client.Close();
.............客戶端發(fā)送完數(shù)據(jù)等待服務端返回處理結(jié)果.............
/**/
///接受從服務器返回的信息
string recvStr = "";
byte[] recvBytes = new byte[1024];
int bytes;
bytes = client.Receive(recvBytes, recvBytes.Length, 0);//從服務器端接受返回信息
recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
label15.Text = DateTime.Now.ToString() + ":" + recvStr;//顯示服務器返回信息
///一定記著用完socket后要關(guān)閉
//關(guān)閉套接字
client.Close();
客戶端簡單代碼:
Imports System.Net.Sockets
Imports System.IO
Private Output As NetworkStream
Private Writer As BinaryWriter
Private Reader As BinaryReader
Dim StrSend As String
Dim client As New TcpClient '
client.Connect(servIP, 2006)
Output = client.GetStream
Writer = New BinaryWriter(Output)
Reader = New BinaryReader(Output)
StrSend = "字符串"
System.Threading.Thread.Sleep(100)
Writer.Write(StrSend)
Try
Message = Reader.ReadString
If Message = "OK" Then
LBinfo.Text = "成功!" '測試
Else
LBinfo.Text = "失敗!"
End If
System.Threading.Thread.Sleep(100)
Catch ex As Exception
MessageBox.Show("Client Application Closing!")
Finally
Writer.Close()
Reader.Close()
Output.Close()
client.Close()
End Try
服務器端
用線程
Imports System.Net.Sockets
Imports System.IO
Imports System.Threading
Imports System.Windows.Forms
Private Connection As Socket
Private readThread As Thread
Private SocketStream As NetworkStream
Private Writer As BinaryWriter
Private Reader As BinaryReader
Public Sub New()
MyBase.New()
'該調(diào)用是 Windows 窗體設(shè)計器所必需的。
InitializeComponent()
'在 InitializeComponent() 調(diào)用之后添加任何初始化
readThread = New Thread(AddressOf RunServer)
readThread.Start()
End Sub
Public Sub RunServer()
Dim Listener As TcpListener
Try
Listener = New TcpListener(Net.IPAddress.Parse("192.168.1.16"), 2006)
Listener.Start()
While True
Connection = Listener.AcceptSocket 'accept an incoming connection
SocketStream = New NetworkStream(Connection) 'create networkstream object associated with socket
Writer = New BinaryWriter(SocketStream) 'create object for transferring data across stream
Reader = New BinaryReader(SocketStream) 'read string data sent from client
Try
Do
strIncept = Reader.ReadString
strIncept = DataDisp(strIncept) '此處插入數(shù)據(jù)處理程序()
SendInfoToClient(strIncept) 'send to client
Loop While Connection.Connected
Catch ex As Exception
MsgBox(ex.ToString)
Finally
Writer.Close()
Reader.Close()
SocketStream.Close()
End Try
End While
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Public Sub SendInfoToClient(ByVal Info As String)
'Send to client
Try
If Connection.Connected Then
Writer.Write(Info)
Connection.Close()
End If
Catch ex As SocketException
MessageBox.Show(ex.ToString)
End Try
End Sub
整個過程都有了
文章名稱:vb.net服務端,VBNET下載
網(wǎng)頁URL:http://www.chinadenli.net/article20/hecsco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機網(wǎng)站建設(shè)、小程序開發(fā)、企業(yè)建站、虛擬主機、軟件開發(fā)、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)