Java Socket 客户端与服务器端的简单交互
2015-11-05 10:02
453 查看
一直想了解客户端与服务器之间的底层的一些交互
我刚开始看到关于解析header的一些例子,但是不清楚是客户端呢还是服务器端
后来,我发现,我的想法是有问题的,解析header只是例子的一个体现方式。
客户端 request 服务器
response
不管哪个都有头部信息,所以重点不是在这里。
服务器端是监听某个端口是否有客户端对其进行连接,socket就像是一个管道,client和socket各占一边。
摘自/article/3758516.html
对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket。服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了。首先ServerSocket将在服务端监听某个端口,当发现客户端有Socket来试图连接它时,它会accept该Socket的连接请求,同时在服务端建立一个对应的Socket与之进行通信。这样就有两个Socket了,客户端和服务端各一个。
对于Socket之间的通信其实很简单,服务端往Socket的输出流里面写东西,客户端就可以通过Socket的输入流读取对应的内容。Socket与Socket之间是双向连通的,所以客户端也可以往对应的Socket输出流里面写东西,然后服务端对应的Socket的输入流就可以读出对应的内容。
读 getInputStream的内容
写 getOutputStream 的内容
下面看具体代码
1.客户端写,服务器端读
服务器端读
2.客户端和服务器同时读写
3.多个客户端与服务器交互
多个客户端的话, 需要用到多线程的知识
Java中的主要是用到Thread和Runnable
另:
1.超时设置
2.编码一致问题
我刚开始看到关于解析header的一些例子,但是不清楚是客户端呢还是服务器端
后来,我发现,我的想法是有问题的,解析header只是例子的一个体现方式。
客户端 request 服务器
response
不管哪个都有头部信息,所以重点不是在这里。
服务器端是监听某个端口是否有客户端对其进行连接,socket就像是一个管道,client和socket各占一边。
摘自/article/3758516.html
对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket。服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了。首先ServerSocket将在服务端监听某个端口,当发现客户端有Socket来试图连接它时,它会accept该Socket的连接请求,同时在服务端建立一个对应的Socket与之进行通信。这样就有两个Socket了,客户端和服务端各一个。
对于Socket之间的通信其实很简单,服务端往Socket的输出流里面写东西,客户端就可以通过Socket的输入流读取对应的内容。Socket与Socket之间是双向连通的,所以客户端也可以往对应的Socket输出流里面写东西,然后服务端对应的Socket的输入流就可以读出对应的内容。
客户端 | 服务器端 |
---|---|
Socket | ServerSocket |
解析response消息 | 解析request消息 |
Socket client = new Socket(host,port) | ServerSocket sever = new ServerSocket(port) |
write read | accept() write read |
//server try to accept the client which connect other socket's connection request Socket socket = server.accept();客户端与服务器都可以读写
读 getInputStream的内容
写 getOutputStream 的内容
下面看具体代码
1.客户端写,服务器端读
服务器端读
public class Server { public static void main(String args[]) throws IOException { //为了简单起见,所有的异常信息都往外抛 int port = 8089; //define ServerSocket listen port 8080 ServerSocket server = new ServerSocket(port); Socket socket = server.accept(); //server try to accept other Socket's connection request , server's accept method is block //connect with client ,then we can get the InputStream of socket which we can get message of client Reader reader = new InputStreamReader(socket.getInputStream()); char chars[] = new char[64]; int len; String temp; int index; StringBuilder sb = new StringBuilder(); while ((len=reader.read(chars)) != -1) { temp = new String(chars,0,len); if((index=temp.indexOf("eof")) != -1){ sb.append(temp.substring(0, index)); break; } // sb.append(new String(chars, 0, len)); } System.out.println("from client: " + sb); reader.close(); socket.close(); server.close(); } }客户端写
public class Client { public static void main(String args[]) throws Exception { String host = "127.0.0.1"; int port = 8089; Socket socket = new Socket(host,port); Writer writer = new OutputStreamWriter(socket.getOutputStream()); writer.write("Hello Server,i'm c1"); writer.write("eof"); writer.flush(); reader.close(); writer.close(); socket.close(); } }
2.客户端和服务器同时读写
3.多个客户端与服务器交互
多个客户端的话, 需要用到多线程的知识
Java中的主要是用到Thread和Runnable
另:
1.超时设置
2.编码一致问题
相关文章推荐
- 关于DES加密,适用Andriod、iOS与JAVA后台
- android studio提示no jdk specified for module解决方法
- java.lang.UnsatisfiedLinkError
- 基于mvc模式的应用框架之struts2(一)---Struts2的执行流程和原理
- 必须了解的Java 基础题
- 自定义控件无法在Eclipse的Android界面编辑器的可视化模式下显示
- Spring配合接口实现解耦原理
- java 中间 final修饰符
- SpringMVC返回json数据的三种方式
- Scanner类
- 在spring mvc中解析输入为json格式的数据有两种方式
- JAVA正则表达式过滤出中文、字母、数字
- 为什么选择 Java 8 ?
- 35 个 Java 代码性能优化总结
- java 获取指定小时前后
- JavaWeb应用开发概述
- Java 中正确使用 hashCode 和 equals 方法
- 使用update-alternatives切换ubuntu下默认java命令
- 关于打包自定义标签,并导入项目使用时,出现java.lang.NoClassDefFoundError: JspException异常,解决方法和注意事项!
- myeclipse不能在线更新插件的解决办法