Java Socket编程
2016-04-08 11:35
323 查看
Java Socket编程
多个客户同时连接
在实际的网络环境里,同一时间只对一个用户服务是不可行的。一个优秀的网络服务程序除了能处理用户的输入信息,还必须能够同时响应多个客户端的连接请求。在java中,实现以上功能特点是非常容易的。设计原理:
主程序监听一端口,等待客户接入;同时构造一个线程类,准备接管会话。当一个Socket会话产生后,将这个会话交给线程处理,然后主程序继续监听。运用Thread类或Runnable接口来实现是不错的办法。
服务器
import java.io.*; import java.net.*; public class Server extends ServerSocket { private static final int SERVER_PORT = 10000; public Server() throws IOException { super(SERVER_PORT); try { while (true) { Socket socket = accept(); new CreateServerThread(socket); } } catch (IOException e) {} finally { close(); } } //--- CreateServerThread class CreateServerThread extends Thread { private Socket client; private BufferedReader in; private PrintWriter out; public CreateServerThread(Socket s) throws IOException { client = s; in = new BufferedReader(new InputStreamReader(client.getInputStream(), "GB2312")); out = new PrintWriter(client.getOutputStream(), true); out.println("--- Welcome ---"); start(); } public void run() { try { String line = in.readLine(); while (!line.equals("bye")) { String msg = createMessage(line); out.println(msg); line = in.readLine(); } out.println("--- See you, bye! ---"); client.close(); } catch (IOException e) {} } private String createMessage(String line) { xxxxxxxxx; } } public static void main(String[] args) throws IOException { new Server(); } }
客户端
import java.io.*; import java.net.*; public class Client { Socket socket; BufferedReader in; PrintWriter out; public Client() { try { socket = new Socket("xxx.xxx.xxx.xxx", 10000); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new PrintWriter(socket.getOutputStream(),true); BufferedReader line = new BufferedReader(new InputStreamReader(System.in)); out.println(line.readLine()); line.close(); out.close(); in.close(); socket.close(); } catch (IOException e) {} } public static void main(String[] args) { new Client(); } }
相关文章推荐
- JVM内存模型来解释多线程并发常见问题和volilate,final,ThreadLocal
- Java中String类型变量初值为null时的连接问题
- Java 程序死锁问题原理及解决方案
- Java Collection框架详解
- java CyclicBarrier 2
- java的mysql连库 增删改查语句、分页查询语句大全
- JVM、JRE、JDK
- java CyclicBarrier
- spring配置datasource的三种方式
- Java解析XML简单版
- Java的垃圾回收机制
- java之return解析
- Java 设计模式 <工厂模式>
- 当Spring同时使用了XML配置和注解
- Java学习之Iterator(迭代器)的一般用法
- Ehcache 整合Spring 使用页面、对象缓存
- 学习Java(一)
- MyEclipse8.6注册码算法
- java日期工具类
- Java判断字符串是否为数字(浮点类型也包括)