前言:
学习java 网络编程预备知识 [url=http://software.intel.com/zh-cn/blogs/2012/12/18/java-socket-socket/?cid=sw:prccsdn23019]socket[/url]、数据流、线程。
前两个都很容易解决,线程这块要下点功夫,还好java对这块有天生的优势。
学socket 之前要看一下tcp/udp 传输层协议,理解起来会有帮助,学数据流之前看一下 装饰模式 会对你成长大有裨益,学习线程之前还是先买本书吧。呵呵。
废话不说了,简单的例子,以激发自己学习兴趣:
怎么样?
是不是感觉咱们一直用的tomcat 你也会写了?呵呵,继续努力吧,说不定下一代高性能服务器软件由你开发!
------------------
服务器端:NetServer.java
客户端:NetClient.java
学习java 网络编程预备知识 [url=http://software.intel.com/zh-cn/blogs/2012/12/18/java-socket-socket/?cid=sw:prccsdn23019]socket[/url]、数据流、线程。
前两个都很容易解决,线程这块要下点功夫,还好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|张三李四手顶替");
}
}