`
ileson
  • 浏览: 211012 次
  • 性别: Icon_minigender_1
  • 来自: 河南省
社区版块
存档分类
最新评论

java 网络编程

    博客分类:
  • Java
阅读更多
前言:
学习java 网络编程预备知识 socket、数据流、线程。
前两个都很容易解决,线程这块要下点功夫,还好java对这块有天生的优势。
学socket 之前要看一下tcp/udp 传输层协议,理解起来会有帮助,学数据流之前看一下 装饰模式 会对你成长大有裨益,学习线程之前还是先买本书吧。呵呵。
废话不说了,简单的例子,以激发自己学习兴趣:

import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 运行方法: 运行此类后,打开浏览器,地址栏中输入“http://127.0.0.1:8888”就可以看到效果!
 * 
 * @author Administrator
 */
public class WebServer {

	public static void main(String[] args) {
		try {
			ServerSocket ss = new ServerSocket(8888);
			while (true) {
				Socket s = ss.accept();
				Service sc = new Service(s);
				Thread th = new Thread(sc);
				th.start();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

/**
 * 
 * 提供多线程服务
 * @author Administrator
 * 
 */
class Service implements Runnable {
	private Socket socket = null;

	public Service(Socket s) {
		this.socket = s;//new 对象时传递 Socket 对象
	}

	@Override
	public void run() {
		try {
			PrintWriter pw = new PrintWriter(socket.getOutputStream());
			pw.println("HTTP/1.0 200 OK");//封装http协议头
			pw.println("Content-Type:text/html;charset=utf-8");//继续封装协议头
			pw.println();
			pw.println("<h1>Test Web Server Success!</h1>");//内容
			pw.flush();
			pw.close();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				socket.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

}


怎么样?
是不是感觉咱们一直用的tomcat 你也会写了?呵呵,继续努力吧,说不定下一代高性能服务器软件由你开发!


------------------
服务器端:NetServer.java
package com.leson.net;

import java.io.DataInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class NetServer {
	
	/**
	 * 主线程。提供服务。
	 * @param args
	 */
	public static void main(String[] args) {
		NetServer ns = new NetServer();
		ns.doListen();
	}

	/**
	 * 监听客户端socket发来的数据
	 */
	public void doListen() {
		try {
			ServerSocket ss = new ServerSocket(12345);
			while (true) {
				Socket s = ss.accept();
				new Thread(new Service(s)).start();
			}
		} catch (IOException e) {
			System.out.println("doListen() throw error!");
			e.printStackTrace();
		}
	}
}

/**
 * 实现多线程。
 * @author Administrator
 * 
 */
class Service implements Runnable {
	private Socket socket = null;
	public Service(Socket socket) {
		this.socket = socket;// 函数构造时,初始化属性。
	}

	/**
	 * 逻辑代码,处理每个线程socket 的数据。
	 */
	@Override
	public void run() {
		DataInputStream dis = null;
		try {
			dis = new DataInputStream(socket.getInputStream());
			byte[] bytes = new byte[1024];
			int n = dis.read(bytes);
			System.out.println(new String(bytes, 0, n));
		} catch (IOException e1) {
			System.out.println("run() throw error!");
			e1.printStackTrace();
		}
	}

}


客户端:NetClient.java
package com.leson.net;

import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;

public class NetClient {

	/**
	 * 发送数据
	 */
	public static void sendData(String sendStr) {
		DataOutputStream dos = null;
		Socket s = null;
		try {
			s = new Socket("127.0.0.1", 12345);
			dos = new DataOutputStream(s.getOutputStream());
			dos.write(sendStr.getBytes());
			dos.close();
			s.close();
		} catch (IOException e) {
			e.printStackTrace();
		} 
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		sendData("abcd|123456|张三李四手顶替");
	}

}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics