本文介绍了如何创建同时侦听UDP和UDP的服务器Java中的TCP客户端的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个问题,我创建了一个TCP客户端和一个UDP客户端,需要创建一个可以与我的两个代码进行通信的服务器:


TCP客户端:

I have a problem I created a TCP Client and a UDP Client and need to create a Server that can communicate with both my code is listed down:


TCP Client:

import java.io.*;
import java.net.*;
class TCPClient {
    public static void main(String args[]) throws Exception
    {
		try
		{
			String Message;
			Socket cs= new Socket("localhost", 10000);
			String M;
			BufferedReader toServer= new BufferedReader(new InputStreamReader(System.in));
			Message = toServer.readLine();

			DataOutputStream toS= new 	DataOutputStream(cs.getOutputStream());
			toS.writeBytes(Message+'\n');

			BufferedReader fromServer= new 	BufferedReader(new InputStreamReader(cs.getInputStream()));
			M = fromServer.readLine();
			System.out.println("from server:"+M+" SUCCESS!!!");
			cs.close();
		}
		catch (Exception ex)
		{

		}
	}
} 






UDP客户端:






UDP Client:

import java.net.*;
import java.io.*;
public class UDPClient
{
	public static void main (String args[]) throws Exception
	{
		try
		{
			BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

			String M = in.readLine();

			byte[] senddata = new byte[1024];

			senddata = M.getBytes();

			InetAddress ip = InetAddress.getByName("localhost");

			DatagramPacket sendPacket = new DatagramPacket(senddata, senddata.length, ip, 20000);

			DatagramSocket clientSocket = new DatagramSocket();

			clientSocket.send(sendPacket);

			byte[] receiveData = new byte[1024];

			DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);

			clientSocket.receive(receivePacket);

			String newM = new String(receivePacket.getData());

			System.out.println(newM);
		}
		catch (Exception ex)
		{
			System.out.println(ex);
		}
	}//main




}






服务器:






The Server:

import java.io.*;
import java.net.*;
class HybridServer implements Runnable
{
	DatagramPacket dgp = null;
	private int port;
	private ServerSocket ss;
	Socket c;

	public HybridServer(int i) throws Exception
	{
		port = i;
		ss = new ServerSocket(port);
	}

	public HybridServer(DatagramPacket d) throws Exception
	{
		dgp = new DatagramPacket(d.getData(),d.getData().length,d.getAddress(),d.getPort());
	}

	public void run()
	{
		 try
		 {
			DatagramSocket ds = new DatagramSocket(dgp.getPort());
			byte[] rData = new byte[1024];
			DatagramPacket d = new DatagramPacket(rData,rData.length);

			while(true)
			{
				ds.receive(d);

				if(d.getData().length > 0)
				{
					new UDPThread(d).start();
				}
				else
				{
					c = ss.accept();

					new TCPThread(c).start();
				}

			}
		 }
		 catch (Exception ex)
		 {

		 }
	}

	class TCPThread extends Thread
	{
		public TCPThread(Socket s)
		{
			c = s;
		}

		public void run()
		{
			try
			{
				BufferedReader fromClient = new BufferedReader(new InputStreamReader(c.getInputStream()));

				String Message= fromClient.readLine();
				System.out.println("from client: "+ Message);
				DataOutputStream toClient= new 	DataOutputStream(c.getOutputStream());
				toClient.writeBytes(Message.toUpperCase()+'\n');
			}
			catch(Exception ex)
			{

			}
		}
	}

	class UDPThread extends Thread
	{
		public UDPThread(DatagramPacket d)
		{
			port = d.getPort();
			dgp = new DatagramPacket(d.getData(),d.getData().length,d.getAddress(),d.getPort());
		}

		public void run()
		{
			try
			{
				String M = new String(dgp.getData());

				M = M.toUpperCase();

				int port = dgp.getPort();

				InetAddress ip = dgp.getAddress();

				byte[] sent = new byte[1024];

				sent = M.getBytes();

				DatagramPacket d = new DatagramPacket(sent, sent.length, ip, port);

				DatagramSocket server = new DatagramSocket();

				server.send(d);
			}
			catch(Exception ex)
			{

			}
		}
	}
}





和线程服务器的类:





And the class that threads the Server:

import java.io.*;
import java.net.*;
class ServerStart extends Thread
{
	public static void main(String args[]) throws Exception
    {
		byte[] rData = new byte[1024];

		InetAddress ip = InetAddress.getByName("localhost");

		DatagramPacket d = new DatagramPacket(rData, rData.length, ip, 20000);

		new Thread(new HybridServer(10000)).start();
		new Thread(new HybridServer(d)).start();
    }
}

推荐答案


这篇关于如何创建同时侦听UDP和UDP的服务器Java中的TCP客户端的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-16 21:33
查看更多