Java Socket通信(多线程)
2014-02-06 01:43
281 查看
看了别人的代码,然后按照自己的理解写了一个,可以运行,和大家分享~
觉得socket不难,多看多做才是提高的方式。
以下是代码:
服务端:
客户端:
·收到bye之后,服务器就停止了。
·注意可能出现端口被占用的情况。
·String不能是null,使用equals方法就会出现空指针异常。
觉得socket不难,多看多做才是提高的方式。
以下是代码:
服务端:
package lance.socket_2; import java.io.*; import java.net.*; //练习一下而已 public class ServerTest { public static void main(String[] args) throws IOException { ServerSocket server = new ServerSocket(965); while (true) {// 在这里一直接收 Socket s_socket = server.accept();// 得到服务端的socket invoke(s_socket);// 放到一个线程里面去跑 } } public static void invoke(final Socket s_socket) { // new Thread(Runnable接口的实例).start(); new Thread(new Runnable() { @Override public void run() { BufferedReader br = null; PrintWriter pw = null; try { br = new BufferedReader(new InputStreamReader( s_socket.getInputStream())); pw = new PrintWriter(new OutputStreamWriter( s_socket.getOutputStream()), true);// 写一句回去的时候用,true 是为了即时刷新 String msg = ""; while (msg.equals("bye") == false) { msg = br.readLine();// 获得一个消息 System.out.println("来自客户端:" + msg); // 给客户端返回一条消息 pw.println("来自服务端:已经收到你的消息→"+msg); pw.flush(); } // 关闭一下,socket也要关闭一下 br.close(); pw.close(); s_socket.close(); } catch (IOException e) { e.printStackTrace(); } } }).start(); } }
客户端:
package lance.socket_2; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; public class ClientTest { public static void main(String[] argsStrings) throws UnknownHostException, IOException { Socket socket = new Socket("localhost", 965); BufferedReader br = new BufferedReader(new InputStreamReader( socket.getInputStream())); PrintWriter pw = new PrintWriter(socket.getOutputStream(), true); BufferedReader input = new BufferedReader(new InputStreamReader( System.in)); String msg = "";//不可以设置为null否则出错 while (msg.equals("bye") == false) { msg = input.readLine();// 输入一个信息 pw.println(msg);// 通过socket发送过去 pw.flush(); System.out.println(br.readLine());// 读取服务端的反馈信息 } //好孩子关闭一下 br.close(); pw.close(); socket.close(); } }
·收到bye之后,服务器就停止了。
·注意可能出现端口被占用的情况。
·String不能是null,使用equals方法就会出现空指针异常。
相关文章推荐
- 理解Java中的前期绑定和后期绑定
- java WEB开发国际化(二)
- Java WEB开发--国际化(一)
- 理解Java中的协变返回类型
- 完美解决java.lang.OutOfMemoryError: bitmap size exceeds VM budget
- Spring ROO初体验
- java DOM4J 无限连解析XML
- java DOM4j 循环解析2层XML
- java.io.IOException: Mkdirs failed to create
- java对象初始化顺序的简单验证
- eclipse不能启动的解决方案
- java连接数据库的解决方法大全(mysql)
- Java多线程初学者指南(6):慎重使用volatile关键字
- c与java求回文数的方法
- 学习java03
- 用Java编写简单的定时关机程序(Calendar,Timer)
- [mysql]MySql数据类型和java类型对照表
- 浅谈TreeSet和HashSet一些区别
- Java多线程初学者指南(5):join方法的使用
- Java入门基本功