![]() |
PCDVD數位科技討論區
(https://www.pcdvd.com.tw/index.php)
- 疑難雜症區
(https://www.pcdvd.com.tw/forumdisplay.php?f=34)
- - VB2005之socket 傳送 & 接收 問題請教
(https://www.pcdvd.com.tw/showthread.php?t=668270)
|
---|
VB2005之socket 傳送 & 接收 問題請教
server主機端的部份
datetimeserver.vb 代碼:
Imports System.Net Imports System.Net.Sockets Imports System.Threading Public Class DateTimeServer Public Shared Sub Main() Dim serverSocket As System.Net.Sockets.Socket Try Dim hostname As String = Dns.GetHostName() Dim serverIP As IPAddress = Dns.Resolve(hostname).AddressList(0) ' DateTime Server Port = 13 Dim Port As String = "13" Dim serverhost As New IPEndPoint(serverIP, Int32.Parse(Port)) serverSocket = New Socket( _ AddressFamily.InterNetwork, _ SocketType.Stream, _ ProtocolType.Tcp) serverSocket.Bind(serverhost) ' Backlog = 50 serverSocket.Listen(50) Console.WriteLine("DateTime server started at: " + serverhost.Address.ToString() + ":" + Port) Dim lc As New ListenClient(serverSocket) Dim serverthread As New Thread( _ New ThreadStart(AddressOf lc.ServerThreadProc)) serverthread.Start() Catch ex As Exception Console.WriteLine(ex.StackTrace.ToString()) End Try End Sub End Class listenclient.vb 代碼:
Imports System.Net Imports System.Net.Sockets Imports System.Threading Imports System.Text Public Class ListenClient Private serverSocket As System.Net.Sockets.Socket ' 建構函式 Public Sub New(ByVal serverSocket As System.Net.Sockets.Socket) Me.serverSocket = serverSocket End Sub Public Sub ServerThreadProc() Dim clientSocket As System.Net.Sockets.Socket Try While (True) clientSocket = serverSocket.Accept() Dim clientInfo As IPEndPoint = CType( _ clientSocket.RemoteEndPoint, _ IPEndPoint) Dim serverInfo As IPEndPoint = CType( _ serverSocket.LocalEndPoint, _ IPEndPoint) Dim recvbytes(1024) As Byte Dim i As Integer = clientSocket.Receive(recvbytes, 0, clientSocket.Available, SocketFlags.None) Dim datetime As String = Encoding.ASCII.GetString(recvbytes, 0, i) Console.WriteLine("Receive {0} bytes.", i) Console.WriteLine("Current server date/Time: {0}", datetime) clientSocket.Shutdown(SocketShutdown.Both) clientSocket.Close() End While Catch ex As Exception Console.WriteLine(ex.StackTrace.ToString()) If clientSocket.Connected Then clientSocket.Close() End If End Try End Sub End Class client接收端的部份 datetimeclient 代碼:
Imports System Imports System.IO Imports System.Net Imports System.Net.Sockets Imports System.Text Public Class DateTimeClient Public Shared Sub Main() Dim args As String() = Environment.GetCommandLineArgs() If (args.Length < 2) Then Console.WriteLine("Usage: DateTimeClient [DateTimeServer DNS/IP]") Exit Sub End If Dim serverHost As String = args(1) Dim hostadd As IPAddress = Dns.Resolve(serverHost).AddressList(0) Dim EPhost As New IPEndPoint(hostadd, 13) Dim clientSocket As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) Try clientSocket.Connect(EPhost) Catch ex As Exception Console.WriteLine(ex.ToString()) End Try Try Dim strDate As String = datetime.Now.ToShortDateString() + " " + datetime.Now.ToLongTimeString() Dim byteDateLine() As Byte = Encoding.ASCII.GetBytes(strDate.ToCharArray()) clientSocket.Send(byteDateLine, byteDateLine.Length, SocketFlags.None) clientSocket.Shutdown(SocketShutdown.Both) clientSocket.Close() Catch ec As Exception Console.WriteLine(ec.StackTrace.ToString()) Exit Sub End Try Console.WriteLine("Press any key to exit.") Console.Read() End Sub End Class 小弟想從接收端送出時間資料給主機端接收,然後顯示在主機端的終端機上 但是只有第1次可以接收並顯示在主機端的終端機上,第2次主機端就沒接到任何Byte 把主機端重啟,就又可以接收,但是也是只能收一次? 請問為什麼會這樣? 小弟是想把socket拿來實作簡易聊天,請問題出在哪? 謝謝 |
自己推推 , 請教一下 ,謝謝
|
VB 我就幫不上忙,不過想稱讚一下,您的發問方式很不錯,程式碼排列一目瞭然,如果在這裡問程式的人都能向仿效您的方式就好了...
socket programming 的問題太專業了,幫推一下,不知道 PCDVD 有沒有魔人可以回答? :) |
所有的時間均為GMT +8。 現在的時間是04:57 AM. |
vBulletin Version 3.0.1
powered_by_vbulletin 2025。