java Socket编程基础
来源:互联网 发布:0708赛季nba总决赛数据 编辑:程序博客网 时间:2024/05/29 18:14
今天开始又要复习java基础部分的知识了,我最薄弱的就是网络编程,线程,io这几块,趁平时放假好好把这几部分的基础知识补上,为下一轮面试做好准备。今天从Socket入门开始,做了一个小的P2P 的Demo ,其实网络编程也并不是很难,懂一些协议的原理利用java就可以实现两台电脑之间的点对点通信。基本原理就两句话:作为服务器端, ServerSocket 在初始化的时候会不断的去监听客户端的请求,当服务器端接受的客户端Socket的请求的时候,服务器端也会产生一个Socket和客户端对应完成通信的功能;作为客户端,一旦指定Socket 的IP和端口,便可以向服务器对应的端口发送连接请求;由此便可以轻松的实现点对点的通信。缺点就是,只能交互式的你一言我一语,不能完成并发的功能,希望这个回合的复习结束时我能把多线程加上。
Server代码:
package edu.hue.jk.socket;import java.io.BufferedReader;/*** * * @author dell *作为服务器端, ServerSocket 在初始化的时候会不断的去监听客户端的请求 *当服务器端接受的客户端Socket的请求的时候,服务器端也会产生一个Socket和客户端对应完成通信的功能 */public class Server {public static void main(String[] args)throws Exception { ServerSocket server=new ServerSocket(30000); // 创建一个ServerSocket用于监听服务器端的请求 while(true){ // 服务器端不断的监听客户端的请求Socket serverSocket=server.accept(); // 当监听客户端的请求时,服务器端也会产生一个对应的Socket 来处理和客户端之间的通信PrintStream ps=new PrintStream(serverSocket.getOutputStream());// 得到服务器端Socket的输出流,用来向客户端发送信息ps.println("您好,服务器已经连接成功");ps.flush();System.out.println("服务器连接成功");InputStream in=serverSocket.getInputStream(); // 得到服务器Socket的输入流,用来读取客户端的内容BufferedReader read=new BufferedReader(new InputStreamReader(in)); // 将输入流进行包装String msg=null;while(true) // 当客户端有信息发送过来的时候,服务器端接受一条数据,并向客户端回复{ msg=read.readLine();System.out.println("来自客户端的信息:"+msg);System.out.println("请输入信息:");BufferedReader readFromkey=new BufferedReader(new InputStreamReader(System.in)); // 用来从键盘中获取信息msg=readFromkey.readLine(); // 从键盘中得到信息ps.println(msg);ps.flush();}// ps.close(); // 关闭打印流 应该try catch finally 这里直接做了异常抛出处理// serverSocket.close(); // 关闭服务器端socket }}}
Client 代码:
package edu.hue.jk.socket;import java.io.BufferedReader;public class Client {/** * @param args * 作为客户端,一旦指定Socket 的IP和端口,便可以向服务器对应的端口发送连接请求 */public static void main(String[] args) throws Exception{Socket client=new Socket("127.0.0.1",30000); // 向指定的服务器发送连接请求InputStream in=client.getInputStream(); // 得到客户端Socket的输入流,用来读取服务器端的内容BufferedReader read=new BufferedReader(new InputStreamReader(in)); // 将输入流进行包装String msg=null;while(true){ // 只要服务器有信息反馈,客户端就接受信息,并向服务端发送信息msg=read.readLine();System.out.println("来自服务器的信息:"+msg);System.out.println("请输入信息:");PrintStream write=new PrintStream(client.getOutputStream()); // 包装客户端Socket 的输出流用来向服务器端发送数据BufferedReader readFromkey=new BufferedReader(new InputStreamReader(System.in)); // 用来从键盘中获取信息msg=readFromkey.readLine(); // 从键盘中得到信息write.println(msg);// 向服务器发送信息write.flush();}//finally{//read.close();//client.close();s//}}}
在命令行下的测试结果:
0 0
- java Socket编程基础
- Java基础---Socket编程
- Java Socket编程基础
- java Socket编程基础
- java socket编程基础
- java socket 编程基础
- Java Socket 基础编程
- Java Socket网络编程基础
- java socket编程(基础)
- JAVA socket编程基础讲解
- Java基础之Socket编程
- java 网络编程 基础socket
- Java Socket编程(二)Socket基础
- java网络编程基础Socket通信应用
- JAVA Socket编程基础(转载)
- Java基础(14):网络编程之socket
- 基于UDP的Java Socket编程基础
- Java socket 入门编程实例-Java基础-Java-编程开发
- 程序员的十大经验和十大教训
- secureCRT自动断开的解决方法
- 【Struts2】Struts2: ValueStack值栈
- HDU题目分类啊!!!
- HTML杂记
- java Socket编程基础
- 游戏编程查缺补漏(1)
- android 自定义字体 字体库 字体格式 使用攻略
- Java参数传递:到底是传值还是传引用
- QOS以及QOS中的令牌桶机制
- linux学习笔记鸟哥的私房菜(一)
- 面向对象 笔记
- eclipse使用技巧
- MySQL数据库 触发器