`
步青龙
  • 浏览: 291620 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
72ba33fb-eefe-3de1-bd65-82a6e579265d
Java面试
浏览量:0
社区版块
存档分类
最新评论

TCP和UDP

阅读更多

TCP: Server端

		try {
			ServerSocket ss = new ServerSocket(8808);
			Socket socket = ss.accept();
 			OutputStream os = socket.getOutputStream();
 			PrintWriter pw = new PrintWriter(os);
 			pw.print("hello");
 			pw.flush();
 			pw.close();
 			socket.close();
 			ss.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
 

 

 Client端:

 

		try {
			Socket socket = new Socket("localhost",8808);
			InputStream is = socket.getInputStream();
			InputStreamReader isr = new InputStreamReader(is);
			BufferedReader br = new BufferedReader(isr);
			String str = br.readLine();
			System.out.println(str);
		}catch (IOException e) {
			e.printStackTrace();
		}
 

 

这样就简单实现来服务器端与客户端的socket数据传输。

 

UDP Server端:

		try {
			DatagramSocket ds = new DatagramSocket(9999); // 创建数据socket
			byte[]  buff = new byte[1024];
			DatagramPacket dp = new DatagramPacket(buff,1024);// 创建数据包
			ds.receive(dp); // 接受数据
			String str = new String(dp.getData()); // 得到数据
			System.out.println(str);
			ds.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
 

Client端:

			DatagramSocket ds = new DatagramSocket(9998);// 创建数据socket
			String str = "abc"; // 要发送的数据
			DatagramPacket dp = new DatagramPacket(
					str.getBytes(),0,str.length(),
					InetAddress.getByName("localhost"),9999);
			// 创建数据包
			ds.send(dp); // 发送数据
			ds.close();
 

TCP通信的服务器端创建一个多线程模型

public class TestServerThread {
	public static void main(String[] args) {
		try {
			ServerSocket ss = new ServerSocket(8808);
			Socket socket = null;
			if ((socket=ss.accept()) != null) {
				new MyThread(socket).start();
			}
			ss.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
class MyThread extends Thread{
	private Socket socket;
	public MyThread(Socket socket){
		super();
		this.socket = socket;
	}
	public void run(){
		try {
			
			try {
				OutputStream os = socket.getOutputStream();
				PrintWriter pw = new PrintWriter(os);
				pw.print("new is :" + new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()));
				pw.flush();
				pw.close();
				socket.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}	
			sleep(10000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
}

 一般的WEB服务器都支持多线程,WEB服务器都是用到这些基础知识。我们可以用java 的TCP变成API创建一个very简单的WEB服务器,如果真的想开发出像Tomcat,WEBSphere确实不是很简单的事情。

 

pw.print("<html><head><title>title</title></head><body>hello welcome!</body></html>");

运行main 然后打开浏览器输入http://localhost:8808 这样就可以在浏览器看到hellol welcome啦。

最简单的模拟啦web服务器。像tomcat等服务器实现的协议不知道有多少种。做java ee开发就不做深究。

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics