我用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){}
}
}
}
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){}
}
}
}
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
vbUDPClient.RemoteHost = mRemoteIP
vbUDPClient.RemotePort = mRemotePort
vbUDPClient.SendData txtSend.Text <---错误代码行,提示10047错误:地址族不支持。
End Sub
http://topic.csdn.net/u/20081119/23/4e081ef0-1ed2-4982-8824-40ece5d9636f.html至于你的为什么会出错可能是远程地址问题,也可能是你的对方程序的问题。
建议先用VB创建两个程序,能正常通讯后再弄接口问题,否则很难判断那里有问题
我想他一定是自己实现了vbUdpClient?内部SendData怎么写得?
我想他一定是自己实现了vbUdpClient?内部SendData怎么写得?