我用Java做了个UDP服务器,再用VB客户机访问是,但是总是提示10014错误。说明:Java程序与写的客户机能正常通信,而使用的VB程序也可以与VB程序正常使用。以下分别给出VB和Java的完整代码,请各位指点下该如何修改,谢谢先。===================VB代码:
Private Sub Command1_Click()
    End
End SubPrivate Sub Command2_Click()
    vbUDPClient.SendData txtSend.Text
End SubPrivate 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 SubPrivate Sub txtSend_Change()
    '在键入文本时,立即将其发送出去。
    vbUDPClient.SendData txtSend.Text
End SubPrivate Sub vbUDPClient_DataArrival(ByVal bytesTotal As Long)
    Dim strData As String
    
    vbUDPClient.GetData strData, vbString
    txtOutput.Text = strData
End Sub
==================================Java代码:
//chatServer.javaimport 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.   

    你这样看看Dim mRemoteIP as string,mRemotePort As Integer
    Private Sub Command1_Click() 
        End 
    End Sub Private Sub Command2_Click()
       vbUDPClient.RemoteHost = mRemoteIP
       vbUDPClient.RemotePort = mRemotePort
       vbUDPClient.SendData txtSend.Text 
    End Sub Private Sub Form_Load() 
       '控件的名字为 udpPeerA 
       With vbUDPClient 
            '重点:必须将 RemoteHost  的值修改为计算机的名字。 
            .RemoteHost = "dearsun"
           .RemotePort = 6666      '连接的端口号。 
            .LocalPort = 1002 '该Winsock控制将使用的本地端口号,便于其它方与之通讯 
            .Bind 1002              '绑定到本地的端口。 
       End With
       mRemotePort = vbUDPClient.RemotePort
       mRemoteIP = vbUDPClient.RemoteHostIP
    End Sub Private Sub txtSend_Change() 
       vbUDPClient.RemoteHost = mRemoteIP
       vbUDPClient.RemotePort = mRemotePort   '在键入文本时,立即将其发送出去。
       vbUDPClient.SendData txtSend.Text 
    End Sub Private Sub vbUDPClient_DataArrival(ByVal bytesTotal As Long) 
        mRemotePort = vbUDPClient.RemotePort
        mRemoteIP = vbUDPClient.RemoteHostIP    Dim strData As String 
        vbUDPClient.GetData strData, vbString 
        txtOutput.Text = strData 
    End Sub 
      

  2.   

    谢谢SupermanKing !可是用你上面的代码还是不行,提示10047错误:地址族不支持。郁闷
      

  3.   

    Private Sub Command2_Click()
       vbUDPClient.RemoteHost = mRemoteIP
       vbUDPClient.RemotePort = mRemotePort
       vbUDPClient.SendData txtSend.Text  <---错误代码行,提示10047错误:地址族不支持。
    End Sub
      

  4.   

    关于UDP的通讯你可以看看这里
    http://topic.csdn.net/u/20081119/23/4e081ef0-1ed2-4982-8824-40ece5d9636f.html至于你的为什么会出错可能是远程地址问题,也可能是你的对方程序的问题。
    建议先用VB创建两个程序,能正常通讯后再弄接口问题,否则很难判断那里有问题
      

  5.   

    他还没发出呢,显然是他本地代码有问题
    我想他一定是自己实现了vbUdpClient?内部SendData怎么写得?
      

  6.   

    他还没发出呢,显然是他本地代码有问题
    我想他一定是自己实现了vbUdpClient?内部SendData怎么写得?
      

  7.   

    我上面给出的Java代码与相应的Java客户机代码通信没有问题;给出的VB代码与VB服务器代码通信也没有问题。但是为什么VB和Java就不能通信呢?请大家来帮帮忙,谢谢