初学Java Socket,实现超简单的聊天程序
2016-03-02 21:20
441 查看
刚开始学Java网络编程,要用到Socket,虽然教程视频有实例,但还是要自己动手写出来。
不过功能实在太简单:
Client说一句之后必须由Server说,不能由Client连续说;反之也一样。
Server端:
Client端:
不过功能实在太简单:
Client说一句之后必须由Server说,不能由Client连续说;反之也一样。
Server端:
//ChatServer.java import java.net.*; import java.io.*; //有可能出现异常的地方一定要抛出异常,并最好用try...catch,不宜用throws public class ChatServer{ public static void main(String[] args){ ServerSocket ss = null; try{ ss = new ServerSocket(4567);//定义ServerSocket时必须指定端口号 System.out.println("Server Start Done!"); }catch(Exception e){ System.out.println("Server Start ERROR!"); System.exit(0); } Socket s = null; try{ s = ss.accept();//建立连接是Server端也会有个Socket实现,用来和Client端对应从而进行连接 System.out.println("Connected!"); }catch(Exception e){ System.out.println("Server ERROR while connecting!"); } try{ //从Client端获取数据,BufferedReader接受InputStreamReader型数据 BufferedReader reader = new BufferedReader(new InputStreamReader(s.getInputStream())); //向Client端发送数据 PrintWriter output = new PrintWriter(s.getOutputStream()); //从键盘获取输入,System.in是InputStream类型 BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Client: " + reader.readLine()); String imsg = input.readLine(); while(!imsg.equals("Over")){ output.println(imsg);//println()方法把字符串打印到PrintWriter,传给Client output.flush();//数据清空 System.out.println("Server: " + imsg); System.out.println("Client: " + reader.readLine()); imsg = input.readLine(); } //数据传输结束后一定要关闭各种连接,逆序依次关闭 input.close(); output.close(); reader.close(); s.close(); }catch(Exception e){ System.out.println("Server ERROR!"+e); } } }
Client端:
//ChatClient.java import java.net.*; import java.io.*; public class ChatClient{ public static void main(String[] args){ Socket s = null; try{ s = new Socket("127.0.0.1", 4567);//定义Socket时需要制定IP和Port System.out.println("Client Start Done!"); }catch(Exception e){ System.out.println("Client Start ERROR!"); } try{ BufferedReader reader = new BufferedReader(new InputStreamReader(s.getInputStream())); PrintWriter output = new PrintWriter(s.getOutputStream()); BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); String msg = input.readLine(); while(!msg.equals("Over")){ output.println(msg); output.flush(); System.out.println("Client: " + msg); System.out.println("Server: " + reader.readLine()); msg = input.readLine(); } input.close(); output.close(); reader.close(); s.close(); }catch(Exception e){ System.out.println("Client ERROR!"+e); } } }
相关文章推荐
- Java中的守护线程和用户线程
- java 连接hbase
- Java 多线程(一)——多线程概述
- spring之IOC详解二
- Java线程的创建和运行
- 《JAVA常用算法手册》 算法经典题 4.猴子吃桃
- 欢迎使用CSDN-markdown编辑器
- spring之IOC详解一
- java日志丢失故障处理导致的死锁问题
- windows下关于使用eclipse开发web服务器后台项目完整配置(jsp+javabean+servlet)
- java web部分知识
- 复制jar包到eclipse报错
- 《转载》struts旅程《2》
- Struts2中Action接收参数的方法主要有以下三种:
- java输入函数
- 《转载》struts旅程《1》
- 如何搭建struts2框架
- springmvc的一个小例子学习(一)
- Spring中Quartz调度器的使用
- 《JAVA常用算法手册》 算法经典题 3.鸡兔同笼