socket网络编程实现客户端和服务端通信
2017-05-23 21:55
260 查看
之前的博客分享过远程备份oracle数据库的代码,但是因为情况变动,代码部署的服务器和数据库服务器不是一个,并且代码部署所在服务器没有oracle的客户端,因此之前的实现策略只能舍弃。尝试一个新的方法:socket编程,本篇博客以Java.net.Socket为demo简单介绍下。
什么是socket编程:
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;如果说HTTP是轿车,提供了封装或者显示数据的具体形式;那么Socket是发动机,提供了网络通信的能力。
Socket与ServerSocket的交互:
盗了一张图,我觉得介绍的特别清楚。客户端new Socket('主机号','端口号');服务端new ServerSocket('端口号');并且通过accept()方法进行监听,等待连接;它们都是通过输入输出流交换数据。可以根据自己的需要将输入输出流包装成其他流。
![](https://img-blog.csdn.net/20170523215937973)
实现demo:
客户端:
输出结果:
client输出:
Receive from server message=: Hello World
Server输出:
Receive from client message=: 用户名:admin;密码:admin
客户端和服务端代码放在不同的服务器上面,客户端需要服务端的ip地址和端口号,与服务端的端口号相符合就建立起连接,聊天工具大概就是这种实现的。
什么是socket编程:
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;如果说HTTP是轿车,提供了封装或者显示数据的具体形式;那么Socket是发动机,提供了网络通信的能力。
Socket与ServerSocket的交互:
盗了一张图,我觉得介绍的特别清楚。客户端new Socket('主机号','端口号');服务端new ServerSocket('端口号');并且通过accept()方法进行监听,等待连接;它们都是通过输入输出流交换数据。可以根据自己的需要将输入输出流包装成其他流。
实现demo:
客户端:
public static void main(String[] args){ try{ //1、创建客户端Socket,指定服务器地址和端口 Socket socket =new Socket("127.0.0.1",9086); //2、获取输出流,向服务器端发送信息 OutputStream os = socket.getOutputStream();//字节输出流 PrintWriter pw =new PrintWriter(os);//将输出流包装成打印流 pw.write("用户名:admin;密码:admin"); pw.flush(); socket.shutdownOutput(); //3、获取输入流,并读取服务器端的响应信息 InputStream is = socket.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String info = null; while((info=br.readLine())!=null){ System.out.println("Receive from server message=: "+info); } //4、关闭资源 br.close(); is.close(); pw.close(); os.close(); socket.close(); }catch(IOException e){ System.out.println(e); } }服务端:
public static void main(String[] args) throws IOException { ServerSocket serverSocket = null; Socket socket = null; Reader reader = null; OutputStream os = null; PrintWriter pw = null; try{ //1、创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口 serverSocket =new ServerSocket(9086);//1024-65535的某个端口 //2、调用accept()方法开始监听,等待客户端的连接 socket = serverSocket.accept(); //3、获取输入流,并读取客户端信息 reader = new InputStreamReader(socket.getInputStream()); char chars[] = new char[1024]; int len; String strClient = ""; while ((len=reader.read(chars)) != -1) { strClient=new String(chars, 0, len); System.out.println("Receive from client message=: " + strClient); } socket.shutdownInput();//关闭输入流 //4、获取输出流,响应客户端的请求 os = socket.getOutputStream(); pw = new PrintWriter(os); pw.write("Hello World"); pw.flush(); //5、关闭资源 pw.close(); os.close(); reader.close(); socket.close(); serverSocket.close(); }catch(IOException e){ e.printStackTrace(); }
输出结果:
client输出:
Receive from server message=: Hello World
Server输出:
Receive from client message=: 用户名:admin;密码:admin
客户端和服务端代码放在不同的服务器上面,客户端需要服务端的ip地址和端口号,与服务端的端口号相符合就建立起连接,聊天工具大概就是这种实现的。
相关文章推荐
- Android作为客户端,PC作为服务端:实现网络通信
- HESSIAN 的VC++ 客户端与JAVA服务端通信 实现
- Android作为客户端,PC作为服务端:实现网络通信
- Python警察与小偷的实现之一客户端与服务端通信实例
- Flex使用BlazerDS实现客户端与服务端通信
- JAVA的Corba客户端 - 服务端 通信实现
- 利用socket TCP协议实现客户端与服务端简单通信
- 虚拟机centos中java代码实现linux(作为服务端),windows(作为客户端)通信
- Flex使用BlazerDS实现客户端与服务端通信
- 【socket】用PHP的socket实现客户端到服务端的通信
- C# winform实现一个服务端和多个客户端进行通信
- AgileEAS.NET SOA 中间件平台.Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答 推荐
- Android作为客户端,PC作为服务端:实现网络通信!
- 【socket】用PHP的socket实现客户端到服务端的通信
- 利用Tcp和socket实现的客户端与服务端的简单通信
- Android作为客户端,PC作为服务端:实现网络通信
- 一步步实现自己的框架系列(三):客户端服务端通信的实现
- Android Socket 聊天工具(一个服务端实现多个客户端间通信)
- iOS 客户端和服务端实现通信
- 【socket】用PHP的socket实现客户端到服务端的通信