所以基本上我想在同一台服务器上使用TCP连接和UDP,从我的理解应该是可能的。我为每个协议使用单独的地址。
我将192.168.XX.XX
用于TCP
连接,127.0.0.1
用于UDP
,但在UDP客户端,我始终认为连接无法绑定因为地址已经在使用,试过多个端口组合,仍然没有变化。
我是一名初级自学成才的程序员;所以可能存在明显的错误。
TCP THREAD / server :
public class LoginWorker implements Runnable {
private Socket client;
public void loginWorker(Socket client) {
this.client = client;
}
private ServerAccess serverAccess = new ServerAccess();
@Override
public void run() {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
String loginData = reader.readLine();
System.out.println(loginData);
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(client.getOutputStream());
PrintWriter writer = new PrintWriter(outputStreamWriter);
writer.println(serverAccess.verifyGroupName(loginData));
outputStreamWriter.flush();
client.close();
}
catch (IOException e){
System.out.println(e);
}
}
}
UDP THREAD / server :
public class LocationServer implements Runnable {
public static void main(String[] args) throws IOException {
}
@Override
public void run() {
try {
InetAddress inetAddress = InetAddress.getByName("127.0.0.1");
DatagramSocket datagramSocket=null;
DatagramPacket datagramPacketReceiver=null;
DatagramPacket datagramPacketSender=null;
byte[] buffer1 = new byte [1024];
byte[] buffer2 = new byte [1024];
if (datagramSocket == null) {
datagramSocket = new DatagramSocket();
datagramSocket.setReuseAddress(true);
datagramSocket.connect(inetAddress,17877);
}
while (true) {
String position="Empty";
ServerAccess serverAccess2 = new ServerAccess();
datagramPacketReceiver = new DatagramPacket(buffer1,buffer1.length);
datagramPacketSender = new DatagramPacket(buffer2,0,buffer2.length,inetAddress,9998);
System.out.println("Location Server Waiting...");
buffer1=datagramPacketReceiver.getData();
datagramSocket.receive(datagramPacketReceiver);
position= new String(buffer1,datagramPacketReceiver.getOffset(),datagramPacketReceiver.getLength());
System.out.println("Location Server Received..."+position);
String[] locationData = position.split(";");
System.out.println("Longitude.." + locationData[1]);
String listPos = locationData[3];
String latitude = locationData[0];
String longitude = locationData[1];
serverAccess2.locationConnexion(locationData);
}
}
catch (IOException e) {
System.out.println(e);
}
}
}
用法/服务器:
public class Login {
public static void main(String[] args) throws IOException {
System.out.println("Server Initialized");
System.out.println(InetAddress.getLocalHost());
ServerSocket serverSocket = null;
serverSocket= new ServerSocket(9999, 100);
Thread udpThread = new Thread(){
LocationServer y = new LocationServer();
@Override
public void run() { y.run();
}
};
udpThread.start();
LoginWorker x;
x = new LoginWorker();
while (true) {
x.loginWorker(serverSocket.accept());
x.run();
}
}
}