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
原创粉丝点击