vb.net怎样实现多客户端与服务器端通信

问题描述

ImportsSystem.Net.SocketsImportsSystem.NetImportsSystem.ThreadingImportsSystem.TextPublicClassUsingAsyncSocketServerDimstrMessageAsStringDimmyListenerAsSocketDimbteAccept(65536)AsByteDimbteSend(65536)AsByteDimEndSocketAsSocketDimmyThread1AsThreadPrivateSub开始监听Button_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handles开始监听Button.ClickmyThread1=NewThread(NewThreadStart(AddressOfStartListen))myThread1.Start()EndSubPrivateSub发送Button_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handles发送Button.ClickDimmyThreadAsNewThread(NewThreadStart(AddressOfSendStart))myThread.Start()EndSubPrivateSubStartListen()DimintPortAsIntegerDimbidEndPointAsIPEndPointintPort=Integer.Parse(Me.通信端口TextBox.Text)bidEndPoint=NewIPEndPoint(IPAddress.Parse("10.111.1.36"),intPort)myListener=NewSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp)TrymyListener.Bind(bidEndPoint)DimmyAsyncCallbackAsNewAsyncCallback(AddressOfAcceptEnd)myListener.Listen(100)myListener.BeginAccept(myAsyncCallback,myListener)Me.联机信息RichTextBox.Text="等待联机中,开始整理数据......"CatchexAsExceptionMessageBox.Show(ex.Message,"打开连接错误",MessageBoxButtons.OK,MessageBoxIcon.Warning)EndTryEndSubPrivateSubAcceptEnd(ByValpIAsyncResultAsIAsyncResult)EndSocket=myListener.EndAccept(pIAsyncResult)Me.联机信息RichTextBox.Text+=vbCrLf&"已接受客户端联机请求!"DimmyAsyncCallbackAsNewAsyncCallback(AddressOfReceiveData)EndSocket.BeginReceive(bteAccept,0,65536,SocketFlags.None,myAsyncCallback,EndSocket)Me.联机信息RichTextBox.Text+=vbCrLf&"开始接收客户端传送的数据内容......"EndSubPrivateSubReceiveData(ByValpIAsyncResultAsIAsyncResult)DimintByteAsIntegerintByte=EndSocket.EndReceive(pIAsyncResult)IfintByte>0ThenMe.接收数据RichTextBox.Text+=Encoding.Default.GetString(bteAccept)EndIfMe.联机信息RichTextBox.Text+=vbCrLf&"成功接收客户端所传送的数据内容!"&intByte.ToString&"个字节"Array.Clear(bteAccept,0,bteAccept.Length)DimmyAsyncCallbackAsNewAsyncCallback(AddressOfReceiveData)EndSocket.BeginReceive(bteAccept,0,65536,SocketFlags.None,myAsyncCallback,EndSocket)EndSubPrivateSubSendStart()DimmyAsyncCallbackAsNewAsyncCallback(AddressOfSendData)bteSend=Encoding.Default.GetBytes(Me.发送数据RichTextBox.Text)EndSocket.BeginSend(bteSend,0,bteSend.Length,SocketFlags.DontRoute,myAsyncCallback,EndSocket)Me.联机信息RichTextBox.Text+=vbCrLf&"开始传送数据至客户端......"EndSubPrivateSubSendData(ByValpIAsyncResultAsIAsyncResult)DimintSendAsIntegerintSend=EndSocket.EndSend(pIAsyncResult)Me.联机信息RichTextBox.Text+=vbCrLf&"数据传送完成,总共传送"&intSend.ToString&"个字节!"EndSubPrivateSub停止联机Button_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handles停止联机Button.ClickmyListener.Close()myThread1.Abort()MessageBox.Show("结束联机操作!","停止监听",MessageBoxButtons.OK,MessageBoxIcon.Information)EndSubPrivateSubUsingAsyncSocketServer_Load(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMe.LoadSystem.Windows.Forms.Control.CheckForIllegalCrossThreadCalls=FalseEndSubEndClass这是服务器端代码,怎么修改成多客户端的服务器端代码,万分感谢!

解决方案

解决方案二:
VB.Net程序设计:简单的通信系统-远程控制+聊天功能里面实现了一个服务端,多个客服端的功能。
解决方案三:
没有看到这个程序的代码呀,怎么下载呀,急呀......
解决方案四:
用线程来实现啊。
解决方案五:

PublicClassClientOrder''通过属性来进行外部访问PrivateClientIDAsIntegerPublicPropertyID()AsIntegerGetReturnClientIDEndGetSet(ByValvalueAsInteger)ClientID=valueEndSetEndPropertyEndClass

PublicClassClientOrder''直接访问PublicClientIDasInteger=0Endclass1.这个两种访问的区别在哪?2.对程序的影响有哪些,采用哪种较好3.在对这个类进行实例的时候,必须用New?为什么直接访问的时候不用new也可以?
解决方案六:
我知道用线程,但是不会用线程呀。还有就是是用线程好呢,还是线程池好呢。我这个就需要两个客户端就行了。请高手给指指,改改。跪谢
解决方案七:
如果有高手帮忙的话,分还可以继续加......
解决方案八:
具体点儿,能够实现多客户端的话,分还可以加.....
解决方案九:
代码以前写的。很差劲的。
解决方案十:
该回复于2012-03-16 09:05:29被版主删除
解决方案十一:
如果你想要我可以提供组件的方式给你,是很成熟的代码,在我的很多系统中都用到
解决方案十二:
行,十分感谢。我的邮箱是cuihanfeng123@163.com,万分感谢......
解决方案十三:
我很想要,分数可以加。我的邮箱是cuihanfeng123@163.com,拜托了,高手!
解决方案十四:
我很想要,分数可以加。我的邮箱是fangyufeng@163.com,拜托了,高手!
解决方案十五:
好像可以用WCF来实现!
解决方案:
ImportsSystem.Text.RegularExpressionsImportsSystem.XmlImportsSystem.NetImportsSystem.Net.SocketsImportsSystem.ThreadingImportsSystem.TextImportsSystem.DiagnosticsPublicClassfrmServerPrivateDelegateSubTxtDisplayInfoDelegate(ByValTextAsString)DimcliSocketAsSocketDimReceiveIPAsStringDimReceiveWordAsStringDimReceiveNameAsStringDimReceiveTimeAsStringDimSelectIPAsStringDimSelectNameAsStringDimIsEnterSendDataAsBoolean=FalseDimServerIPAsStringDimStopThreadAsBoolean=FalsePublicClassStateObject'Clientsocket.PublicworkSocketAsSocket=Nothing'Sizeofreceivebuffer.PublicConstBufferSizeAsInteger=4096'Receivebuffer.Publicbuffer(BufferSize)AsByte'Receiveddatastring.PublicsbAsNewStringBuilderEndClass'StateObject'服务端的SocketDimlistenerAsSocket'与客户端会话的SocketDimmySocketAsSocket'服务端的运行状态DimIsRunAsBoolean=False'监听接收数据线程DimmyThreadAsThreadPublicallDoneAsNewManualResetEvent(False)PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load'XMLServer()Start()btnSend.Enabled=FalseXMLShow()TextBox1.SelectionColor=Color.BlueLabel2.Text=Dns.GetHostEntry(Dns.GetHostName).AddressList().GetValue(0).ToStringEndSubPrivateSubXMLShow()ListBox2.Items.Clear()DimxmlDocAsNewXmlDataDocumentxmlDoc.Load(Application.StartupPath&"UserDef.xml")DimxnAsXmlNode=xmlDoc.SelectSingleNode("collect")DimxnlAsXmlNodeList=xn.ChildNodesDimxnfAsXmlNodeForEachxnfInxnlDimxeAsXmlElement=CType(xnf,XmlElement)Ifxe.GetAttribute("IP")<>""ThenListBox2.Items.Add(xe.InnerText)'&amp;vbCrLf'显示属性值EndIfNextxnfEndSubPrivateSubXMLServer()DimxmlDocAsNewXmlDataDocumentxmlDoc.Load(Application.StartupPath&"UserDef.xml")DimxnAsXmlNode=xmlDoc.SelectSingleNode("collect")DimxnlAsXmlNodeList=xn.ChildNodesDimxnfAsXmlNodeForEachxnfInxnlDimxeAsXmlElement=CType(xnf,XmlElement)Ifxe.GetAttribute("IP")<>""ThenServerIP=xe.InnerText'&amp;vbCrLf'显示属性值Debug.Print(ServerIP)EndIfNextxnfEndSubPrivateSubStart()myThread=NewThread(AddressOfListen)myThread.Start()EndSubPublicSubListen()TryDimipHostInfoAsIPHostEntry=Dns.GetHostEntry(Dns.GetHostName)DimipAddressAsIPAddress=ipHostInfo.AddressList(0)DimlocalEndPointAsNewIPEndPoint(ipAddress,11000)'初始化socketlistener=NewSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp)'绑定端口listener.Bind(localEndPoint)'开始监听listener.Listen(10)BeginInvoke(NewEventHandler(AddressOfAddInfo),"本地服务端已启动,正在等待连接......")StartListen()CatchexAsExceptionMsgBox("错误"+ex.ToString,MsgBoxStyle.Information,"Listen")EndTryEndSubPublicSubStartListen()Dimbytes()AsByte=New[Byte](1024){}DimdataAsString=String.EmptyTryWhileTrueIfStopThread=FalseThenallDone.Reset()listener.BeginAccept(NewAsyncCallback(AddressOfAcceptCallback),listener)IsRun=TrueallDone.WaitOne()ElseExitSubEndIfEndWhileCatchexAsExceptionMsgBox("错误"+ex.ToString,MsgBoxStyle.Information,"StartListen")EndTryEndSub

解决方案:
PublicSubAcceptCallback(ByValarAsIAsyncResult)'Getthesocketthathandlestheclientrequest.DimlistenerAsSocket=CType(ar.AsyncState,Socket)'Endtheoperation.DimhandlerAsSocket=listener.EndAccept(ar)'Createthestateobjectfortheasyncreceive.DimstateAsNewStateObjectstate.workSocket=handlerhandler.BeginReceive(state.buffer,0,StateObject.BufferSize,0,NewAsyncCallback(AddressOfReadCallback),state)Debug.Print("AcceptCallback")EndSubPublicSubReadCallback(ByValarAsIAsyncResult)DimcontentAsString=String.Empty'Retrievethestateobjectandthehandlersocket'fromtheasynchronousstateobject.DimstateAsStateObject=CType(ar.AsyncState,StateObject)DimhandlerAsSocket=state.workSocket'Readdatafromtheclientsocket.DimbytesReadAsInteger=handler.EndReceive(ar)IfbytesRead>0Then'Theremightbemoredata,sostorethedatareceivedsofar.state.sb.Append(Encoding.UTF8.GetString(state.buffer,0,bytesRead))'Checkforend-of-filetag.Ifitisnotthere,read'moredata.content=state.sb.ToString()Ifcontent.IndexOf("<EOF>")>-1Then'Allthedatahasbeenreadfromthe'client.Displayitontheconsole.Dimtokens()AsStringtokens=content.Trim.Split("|")ReceiveIP=tokens(0)ReceiveWord=tokens(1)ReceiveTime=tokens(2)Debug.Print(content)DimdelAsNewTxtDisplayInfoDelegate(AddressOfDisplayStatus)'Me.Invoke(del,"Read{0}bytesfromsocket."+vbLf+"Data:{1}"&content.Length&content.ToString)Me.Invoke(del,content.ToString)Else'Notalldatareceived.Getmore.handler.BeginReceive(state.buffer,0,StateObject.BufferSize,0,NewAsyncCallback(AddressOfReadCallback),state)EndIfEndIfhandler.Shutdown(SocketShutdown.Both)handler.Close()'Signalthemainthreadtocontinue.allDone.Set()Debug.Print("ReadCallback")EndSub'ReadCallbackPrivateFunctionGetReceiveName()AsStringDimxmlDocAsNewXmlDataDocumentxmlDoc.Load(Application.StartupPath&"UserDef.xml")DimxnlAsXmlNodeList=xmlDoc.SelectSingleNode("collect").ChildNodesDimxnAsXmlNodeForEachxnInxnlDimxeAsXmlElement=CType(xn,XmlElement)Ifxe.GetAttribute("IP")=ReceiveIPThenGetReceiveName=xe.InnerTextExitFunctionEndIfNextxnGetReceiveName=ReceiveIPEndFunctionPrivateSubDisplayStatus(ByValTextAsString)'Me.ListBox1.Items.Add(SelectName&"说:"&ReceiveWord)IfIsEnterSendData=TrueThenMe.RichTextBox1.Text=Trim(Me.RichTextBox1.Text)&GetReceiveName()&"说:"&ReceiveTime&vbCrLf&""&Trim(ReceiveWord)ElseMe.RichTextBox1.Text=Trim(Me.RichTextBox1.Text)&GetReceiveName()&"说:"&ReceiveTime&vbCrLf&""&Trim(ReceiveWord)&vbCrLfEndIfRichTextBox1.SelectionStart=RichTextBox1.TextLengthRichTextBox1.Focus()PlaySound()TextBox1.Focus()'ListBox1.SelectedIndex=ListBox1.Items.Count-1EndSub'发送信息PrivateSubbtnSend_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesbtnSend.ClickIsEnterSendData=FalseSendDataToServer()EndSubPrivateSubSendDataToServer()IfSelectIP=""ThenMsgBox("提示:没有选择发送对象!",MsgBoxStyle.Information,"MyQQ")ExitSubEndIfDimremoteEPAsNewIPEndPoint(Net.IPAddress.Parse("10.178.149.106"),11000)cliSocket=NewSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp)TrycliSocket.Connect(remoteEP)'ListBox1.Items.Add("连接服务端成功!")DimmsgAsByte()=Encoding.UTF8.GetBytes("|"&SelectIP&"|"&Trim(TextBox1.Text)&"|"&Now()&"|"&"<EOF>")DimbytesSentAsInteger=cliSocket.Send(msg)IfIsEnterSendData=TrueThenMe.RichTextBox1.Text=Me.RichTextBox1.Text&"本地消息:"&Now()&vbCrLf&""&Trim(TextBox1.Text)ElseMe.RichTextBox1.SelectionColor=Color.BlueMe.RichTextBox1.Text=Trim(Me.RichTextBox1.Text)&"本地消息:"&vbCrLf&""&Trim(TextBox1.Text)&Chr(13)+Chr(0)EndIfRichTextBox1.SelectionStart=RichTextBox1.TextLengthRichTextBox1.Focus()TextBox1.Focus()'ListBox1.Items.Add("本地信息:"+TextBox1.Text)'ListBox1.SelectedIndex=ListBox1.Items.Count-1TextBox1.Text=""'ListBox1.Items.Add(CStr(ListBox1.Items.Count+1))cliSocket.Shutdown(Net.Sockets.SocketShutdown.Both)'禁用某Socket上的发送和接收cliSocket.Close()'关闭socketCatchexAsExceptionMsgBox("无法连接到远程服务器由于目标机器积极拒绝,无法连接",MsgBoxStyle.Critical,"AGVExtend")EndTryEndSub'非UI线程调用窗体控件,保证线程安全。与聊天实现无关。SubAddInfo(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)'ListBox1.Items.Add("信息:"+sender.ToString)Me.RichTextBox1.Text=Me.RichTextBox1.Text&"信息:"+sender.ToString&vbCrLfEndSub'关闭窗口时发关退出信息并清理资源PrivateSubForm1_FormClosing(ByValsenderAsObject,ByValeAsSystem.Windows.Forms.FormClosingEventArgs)HandlesMe.FormClosingTryStopThread=TrueallDone.Set()myThread.Abort()CatchexAsExceptionMsgBox("错误",MsgBoxStyle.Information,"Form1_FormClosing")EndTryEndSubPrivateSubTextBox1_KeyPress(ByValsenderAsObject,ByValeAsSystem.Windows.Forms.KeyPressEventArgs)HandlesTextBox1.KeyPressIfe.KeyChar=Chr(13)ThenIsEnterSendData=TrueSendDataToServer()EndIfEndSubPrivateSubTextBox1_TextChanged(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesTextBox1.TextChangedIfTextBox1.Text=""ThenbtnSend.Enabled=FalseElsebtnSend.Enabled=TrueEndIfEndSubPrivateSubToolStripButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesToolStripButton1.ClickForm2.ShowDialog()Me.XMLShow()EndSubPrivateSubListBox2_SelectedIndexChanged(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesListBox2.SelectedIndexChangedIfListBox2.SelectedItems.Count=0ThenExitSubDimxmlDocAsNewXmlDataDocumentxmlDoc.Load(Application.StartupPath&"UserDef.xml")DimxnlAsXmlNodeList=xmlDoc.SelectSingleNode("collect").ChildNodesDimxnAsXmlNodeForEachxnInxnlDimxeAsXmlElement=CType(xn,XmlElement)Ifxe.InnerText=ListBox2.SelectedItems(0)ThenSelectName=xe.InnerTextSelectIP=xe.GetAttribute("IP")Debug.Print(SelectName)Debug.Print(SelectIP)EndIfNextxnMe.Text="你正在与"&SelectName&"通讯"EndSubPrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickMe.Close()EndSubPrivateSub关于ToolStripMenuItem_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handles关于ToolStripMenuItem.ClickAboutBox1.ShowDialog()EndSubPrivateSubPlaySound()TryDimmyplayerAsNewSystem.Media.SoundPlayer()DimmyfilenameAsString=Application.StartupPath+"Soundmsg.wav"myplayer.SoundLocation=myfilenamemyplayer.LoadAsync()myplayer.Play()CatchexAsExceptionErr.Clear()EndTryEndSubEndClass

解决方案:
引用楼主cuihanfeng的回复:

这是服务器端代码,怎么修改成多客户端的服务器端代码,万分感谢!

直接说你调试出这段代码有什么问题吧!
解决方案:
線程吧!
解决方案:

解决方案:
为什么我看到VB的代码我就有一种想杀死人的冲动?

时间: 2024-10-15 16:44:52

vb.net怎样实现多客户端与服务器端通信的相关文章

c#客户端和服务器端通信问题

问题描述 c#客户端和服务器端通信问题 服务端ip:192.168.1.214.客户端ip:192.168.1.30 客户端代码public static void ReceiveStart(string localip, string localPort) { try { //创建接受套接字 IPAddress localIP = IPAddress.Parse(localip); IPEndPoint localIPEndPoint = new IPEndPoint(localIP, int

有关客户端与服务器端通信的问题

问题描述 写了一段服务器端和客户端通信代码,实现以下功能:客户端将文件发送到服务器端,服务器端接收完文件后给客户端发送一个消息.运行代码后出现以下问题不知如何神马原因:客户端文件可以正确地传到服务器端,但是服务器端接收完文件后发送给客户端地确认消息,客户端收不到,报java.net.SocketException: Socket is closed的异常,请各位帮忙看看客户端代码package client;import java.io.*;import java.net.*;public cl

Android实现蓝牙客户端与服务器端通信示例

一.首先说明:蓝牙通信必须用手机测试,因为avd里没有相关的硬件,会报错! 好了,看看最后的效果图: 二.概述: 1.判断是否支持Bluetooth BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if(bluetoothAdapter == null) { //the device doesn't support bluetooth } else { //the device support b

通过TCP进行客户端与服务器端通信

问题描述 为何只能进行单方通信?无法进行双方通信?????求大神解救!!!!!!!!!!packageswing;importjava.awt.BorderLayout;importjava.awt.Color;importjava.awt.Container;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.io.BufferedReader;importjava.io.IOExcep

java多线程实现服务器端与多客户端之间的通信_java

用java语言构建一个网络服务器,实现客户端和服务器之间通信,实现客户端拥有独立线程,互不干扰. 应用多线程来实现服务器与多线程之间的通信的基本步骤 服务器端创建ServerSocket,循环调用accept()等待客户端链接 客户端创建一个Socket并请求和服务器端链接 服务器端接受客户端请求,创建socekt与该客户端建立专线链接 建立链接的socket在一个单独的线程上对话 服务器继续等待新的链接 服务器端Server.java package test.concurrent.socke

使用Velocity实现客户端和服务器端模板

在 HTML 或者 XML 这样的标准表示或交换格式中,文本性数据的操作和转换是一种频繁而且通常非常单调的活动,每个开发人员都会遇到.模板引擎可以改善这个过程,它在模板中保留输出中的静态部分,而动态生成和安排变化的部分.Velocity 是一种高度实用的.开放源代码的模板引擎,可以方便地集成到其他客户端或服务器端应用程序中. 对于服务器端应用程序,如果与兼容 Servlet 2.3+ 的 Web 层容器集成,Velocity 为 JSP 技术提供了一种可行的替代方案,可以强制实施表示逻辑与应用程

php上传图片客户端和服务器端实现方法

 这篇文章主要介绍了php上传图片客户端和服务器端实现方法,涉及php操作文件的技巧,涉及图片后缀验证.文件重命名等常用方法,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了php上传图片客户端和服务器端实现方法.分享给大家供大家参考.具体如下: 前台表单代码 ? 1 2 3 4 <form name="form1" method="post" action="admin_upfile.php" enctype="

php-androi客户端与服务器端的通信问题

问题描述 androi客户端与服务器端的通信问题 我用php写的服务器端, 我想要实现这么一个功能. 假设一共有4台android客户端,每一个客户端都向服务器传两个值(id,value),然后服务器再把所有接收到的值返回给每一个客户端,由此来形成一个数据共享. 从客户端传值到服务器我已经实现了,现在的问题就是怎么把服务器的所有(id,value)数据对返回给android客户端? 解决方案 http无状态 所以要用到比轮循更高级的"push技术" 解决方案二: socket连接 ud

安卓客户端与服务器端有哪些通信方式?

问题描述 安卓客户端与服务器端有哪些通信方式? 安卓客户端与服务器端有哪些通信方式各有什么优缺点怎么根据项目的实际情况选择啊? 或者有什么相关资料推荐也好. 马上毕业小白一个在此先谢谢各位大侠. 解决方案 安卓客户端与服务器端的通信方法主要有长连接和短连接.短连接:是指客户端与服务器通讯双方有数据交互时才建立一个连接,数据发送完毕后就断开此连接,如:http协议.基于该协议的框架如:httpclient长连接:是指客户端与服务器之间始终建立着一个通讯连接,在该连接没有中断之前,客户端与服务器端之