基于TCP实现简单的客户端服务端的消息传递
2016-03-28 17:42
411 查看
其实网络编程时很重要的,当初我也没好好去学,现在也因为一直没接触到,也没想着去看,今天无聊,就闲着看了看。
首先看下通讯的流程。
接下来我们来简单实现一下:
先看图有个基本的了解:
接下来我们就用两个类简单模拟一下客户端与服务端:
先看客户端类:
Client:
再看看服务端:
Server:
再看看控制台的简单打印:
先看服务端的控制台:
在看看客户端的控制台:
这里值得注意的是,我们必须先启动服务端,客户端才能去请求。先启动服务端,然后通过serverSocket.accept();来监听客户端的请求
首先看下通讯的流程。
接下来我们来简单实现一下:
先看图有个基本的了解:
接下来我们就用两个类简单模拟一下客户端与服务端:
先看客户端类:
Client:
package com.socket.demo; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; /** * 客户端 * @author lolli * */ public class Client { public static void main(String[] args) { try { // 实例化一个Socket,请求8888端口 Socket socket = new Socket("localhost", 8888); // 获取一个输出流像服务端发送消息 OutputStream outputStream = socket.getOutputStream(); PrintWriter out = new PrintWriter(outputStream); out.write("用户名:admin; 密码:123456"); // 刷新缓存 ,发送请求 out.flush(); socket.shutdownOutput(); // 获取一个输入流,接受服务端的响应 InputStream in = socket.getInputStream(); // 转换成字符流 InputStreamReader inputStreamReader = new InputStreamReader(in); // 放入缓冲流 BufferedReader bufferedReader = new BufferedReader(inputStreamReader); // 获取客户端请求的数据 String str = ""; while((str = bufferedReader.readLine())!=null){ // 打印客户端请求的数据 System.out.println("我是客户端,服务端说: " + str); } socket.shutdownInput(); // 关闭流 out.close(); outputStream.close(); socket.close(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
再看看服务端:
Server:
package com.socket.demo; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; /** * 服务端 * @author lolli * */ public class Server { public static void main(String[] args) { try { // 实例化一个ServerSocket,监听8888端口 ServerSocket serverSocket = new ServerSocket(8888); System.out.println("***** 启动服务器,等待客户端的连接请求 ******"); Socket socket = serverSocket.accept(); // 接收输入流(字节流) InputStream in = socket.getInputStream(); // 转换成字符流 InputStreamReader inputStreamReader = new InputStreamReader(in); // 放入缓冲流 BufferedReader bufferedReader = new BufferedReader(inputStreamReader); // 获取客户端请求的数据 String str = ""; String data = ""; while((str = bufferedReader.readLine())!=null){ // 打印客户端请求的数据 System.out.println("我是服务端,客户端说: " + str); data = str; } System.out.println(str); // 接收到客户端请求的数据后相应客户端 OutputStream outputStream = socket.getOutputStream(); PrintWriter out = new PrintWriter(outputStream); out.write("接收到了客户端传递的数据,数据为:‘" + data + "’"); out.flush(); socket.shutdownInput(); socket.shutdownOutput(); // 关闭流 bufferedReader.close(); inputStreamReader.close(); in.close(); socket.close(); serverSocket.close(); out.close(); outputStream.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
再看看控制台的简单打印:
先看服务端的控制台:
在看看客户端的控制台:
这里值得注意的是,我们必须先启动服务端,客户端才能去请求。先启动服务端,然后通过serverSocket.accept();来监听客户端的请求
相关文章推荐
- Android通过HttpURLConnection链接到网络,并获取网络数据
- iOS网络篇
- 数据的网络请求
- iOS RSA的网络安全模型、iOS签名机制总结(登录、token安全、签名)
- 简单的网络图片下载
- time_wait tcp
- HTTP错误代码大全
- [BZOJ3651]网络通信(LCT)
- 3月23日作业
- 分析MockHttpServletRequestBuilder中content和param的区别
- Android Https服务器端和客户端简单实例
- bzoj 3651: 网络通信
- 浅谈https\ssl\数字证书
- httpd+nfs 简单的文件系统共享
- webHttpBinding、basicHttpBinding和wsHttpBinding区别
- 网络基础---IP地址
- 详解rsync算法--如何减少同步文件时的网络传输量
- TCP的三次握手(建立连接)和四次挥手(关闭连接)
- 网络基础---子网掩码
- 搭建可用http访问的svn(windows)