我用Java做了个UDP服务器,再用VB客户机访问是,但是总是提示10014错误。 说明:其中的Java程序与Java写的客户机能正常通信,而使用的VB程序也可以与VB写的程序正常使用。 但是下面的JAVA和VB却无法通信。以下分别给出VB和Java的完整代码,请各位指点下该如何修改,谢谢先。 =================== VB代码: 
Private Sub Command1_Click() 
    End 
End Sub Private Sub Command2_Click() 
    vbUDPClient.SendData txtSend.Text 
End Sub Private Sub Form_Load() 
'控件的名字为 udpPeerA 
    With vbUDPClient 
        '重点:必须将 RemoteHost  的值修改为计算机的名字。 
        .RemoteHost = "dearsun" 
        '.RemoteHost = "127.0.0.1" 
        '.RemoteHost = "localhost" 
        .RemotePort = 6666      '连接的端口号。 
        .LocalPort = 1002 '该Winsock控制将使用的本地端口号,便于其它方与之通讯 
        .Bind 1002              '绑定到本地的端口。 
    End With 
    
End Sub Private Sub txtSend_Change() 
    '在键入文本时,立即将其发送出去。 
    vbUDPClient.SendData txtSend.Text 
End Sub Private Sub vbUDPClient_DataArrival(ByVal bytesTotal As Long) 
    Dim strData As String 
    
    vbUDPClient.GetData strData, vbString 
    txtOutput.Text = strData 
End Sub 
================================== Java代码: 
//chatServer.java import java.io.*; 
import java.net.*; public class chatServer 

      public static void main(String[] str) 
      { 
          ServerSocket srvSocket; 
          Socket sSocket; 
  int srvPort = 6666; //服务器服务端口           ObjectOutputStream objOut=null; 
          ObjectInputStream objIn=null;               try{ 
                  srvSocket=new ServerSocket(srvPort); 
                  System.out.println("Waiting for client's connecting...");                   sSocket=srvSocket.accept(); //等待客户机连接请求                   System.out.println("Client connected, you may Exit this program by type 'QUIT'"); 
                System.out.println("***************************************\n"); 
                
                  objOut=new ObjectOutputStream(sSocket.getOutputStream()); 
                  objIn=new ObjectInputStream(sSocket.getInputStream());               }catch(Exception e) 

System.exit(0); 

        //启动发送消息线程类 
          sendMsgOut send=new sendMsgOut(objOut); 
          send.start(); //启动接收消息线程类 
          getMsgFromClient get=new getMsgFromClient(objIn); 
          get.start(); 
      } 

//发送消息线程类 
class sendMsgOut extends Thread 

      ObjectOutputStream objOut=null;       public sendMsgOut(ObjectOutputStream out) 
      { 
          objOut=out; 
      }       public void run() 
      { 
          String strMsg="";           while(true) 
          { 
              try{ 
//发送一条消息 
              strMsg=(new BufferedReader(new InputStreamReader(System.in))).readLine(); 
              objOut.writeObject(strMsg); 
              if (strMsg.equals("QUIT"))//服务器退出聊天 

              System.out.println("服务器退出聊天。\n"); 
System.exit(0); 

              }catch(Exception e){} 
              //System.out.println(strMsg); 
          } 
      } 
    

//接收消息线程类 
class getMsgFromClient extends Thread 

      ObjectInputStream objIn;       public getMsgFromClient(ObjectInputStream in) 
      { 
          objIn=in; 
      }       public void run() 
      { 
          String strMsg="";           while(true) 
          { 
              try{ 
//接收一条消息 
              strMsg=(String)objIn.readObject(); 
              System.out.println("Client said---: "+strMsg);               if (strMsg.equals("QUIT"))//客户机退出聊天 

              System.out.println("客户机退出聊天。\n"); 
System.exit(0); 

              }catch(Exception e){} 
          } 
      } 
}

解决方案 »

  1.   

    答:
    1)这是TCP,不是楼主说的UDP通信.
    2)JAVA中与其它语言如VB通信时,不要使用ObjectInputStream与ObjectOutputStream这些对象流.你应先确定好网络通信双方的应用层的通信协议(如:数据的格式与时序),然后在JAVA一方使用字节汉流或字符流进行通信.
    3)另外:
    //发送一条消息 
     objOut.writeObject(strMsg); 
    之后,要用:
     objOut.flush();
    及时刷新一下.