理解Socket通信中的Input和Output

简介:

Socket通信中的Input、Output。

Client端,也就是发出请求的一端有一个Socket对象;Server端,即处理请求的一端也有一个Socket对象。

--Client端--

Socket对象的InputStream,可以理解为Client端的收件箱,Server端传来的信息会进入Client端Socket的InputStream中(进入Client端的收件箱)。当我们使用网络邮箱去检查收件箱时,其实完全的步骤是:

1.点击收件箱;

2.邮箱页面通过浏览器(客户端)向服务器发送查看收件箱的请求(也可以理解为从服务器端获取最新的信件);

3.服务器接收请求,将信件(消息)传给浏览器(客户端);

4.客户端从收件箱中读出信件,并展示在屏幕上。

将上述步骤对应到程序代码上,再看:

 
  1. //以下代码中的方法和关键字不一定准确,使用时不能直接拷贝粘贴  
  2. URL url = new URL("http://mail.163.com/username/inbox"); //地址是瞎编的  
  3. URLConnection conn = url.openConnection(); //准备好连接到目标服务器  
  4. //...在connect之前,应该根据服务器连接要求设置好HTTP头信息,否则connect之后是无法设置头信息的  
  5. conn.connect(); //开启TCP连接,注意,此时只是创建了TCP连接,还没有真正向服务器端发出url请求  
  6. InputStream is = conn.getInputStream(); //发出url请求,并获得服务器发回来的信息(如果有,且服务器可以正常响应请求的话)  
  7. //剩下的部分,就看你自己怎样去操作从服务器获得的InputStream了。比如,将这些stream重新拼成String串,并保存到本地。  

Socket对象的OutputStream,可以理解为Client端的发件箱,你只需将要发出去的消息写到OutputStream中(放入发件箱),该消息就会被传送至服务器端。

这里需要注意的一点,当创建连接时,需要设置一下URLConnection的setDoOutput(true)。如果不设置这个参数,默认情况下客户端是不能发送消息(url请求不算在内)到服务器端的。

--Server端--

Server端的Socket就简单多了,同上,Server端的InputStream也即Server端的收件箱,Client端发来的消息会被放在Server端Socket的InputStream里。而Server端Socket的OutputStream是用来将消息发送出去的。

总结:

Client端创建连接,并发出请求给Server端;

Server端从自己的InputStream中收到请求的具体内容,做一些具体的处理工作;

Server端将处理好的数据放入自己的OutputStream;

Client端从自己的InputStream读出Server端发过来的数据。

============================

Server端将数据放入自己的OutputStream中,数据可以被Client从自己的InputStream中取出来;

Client端将数据放入自己的OutputStream中,数据可以被Server从自己的InputStream中取出来。

就这么简单。


本文转自 rickqin 51CTO博客,原文链接:http://blog.51cto.com/rickqin/1061087


相关文章
|
1月前
|
数据处理 C# C++
如何使用C#和C++结构体实现Socket通信
如何使用C#和C++结构体实现Socket通信
|
3月前
|
网络协议 程序员 Python
揭秘Python网络编程:深入理解Socket通信
在当今信息时代,网络通信已经成为人们生活中不可或缺的一部分。而Python作为一种高效、易用的编程语言,自然也能够很好地支持网络编程和Socket通信。本文将介绍Python网络编程与Socket通信的相关知识,包括Socket通信模型、Socket编程接口、网络套接字等内容。
|
3月前
|
网络协议 开发者 Python
Python网络编程与Socket通信:连接世界的无限可能
在当今数字化时代,Python作为一种强大的编程语言,通过网络编程与Socket通信为我们打开了连接世界的无限可能。本文将深入探讨Python网络编程的基础知识、Socket通信的原理以及实际应用,帮助读者更好地理解并运用这一技术。
|
3月前
|
网络协议
【Netty 网络通信】Socket 通信原理
【1月更文挑战第9天】【Netty 网络通信】Socket 通信原理
|
5月前
|
存储 Cloud Native Linux
C++封装了socket通信类
C++封装了socket通信类
|
6月前
|
存储
14.10 Socket 套接字选择通信
对于网络通信中的服务端来说,显然不可能是一对一的,我们所希望的是服务端启用一份则可以选择性的与特定一个客户端通信,而当不需要与客户端通信时,则只需要将该套接字挂到链表中存储并等待后续操作,套接字服务端通过多线程实现存储套接字和选择通信,可以提高服务端的并发性能,使其能够同时处理多个客户端的请求。在实际应用场景中,这种技术被广泛应用于网络编程、互联网应用等领域。在服务端启动时,创建套接字并进行绑定,然后开启一个线程(称为主线程)用于监听客户端的连接请求。主线程在接收到新的连接请求后,会将对应的套接字加入一个数据结构(例如链表、队列、哈希表等)中进行存储。同时,主线程会将存储套接字的数据结构传递给
25 1
14.10 Socket 套接字选择通信
|
6月前
14.5 Socket 应用组播通信
组播通信是一种基于UDP协议的网络通信方式,它允许发送方将消息同时传递给多个接收方。在组播通信中,发送方和接收方都会加入一个共同的组播组,这个组播组对应一个特定的IP地址,所有加入该组播组的主机都能够接收到发送方发送的消息。组播通信可以有效地减少网络流量和网络负载,因为在传统的点对点通信方式下,每个消息都需要单独传输到每个接收方,而在组播通信中,每个消息只需要传输一次,就可以同时传递给多个接收方。在使用组播模式时,需要在套接字上使用`setsockopt()`函数来设置套接字的`IP_MULTICAST_IF`选项,指定本地主机的出站接口地址,用于发送组播数据包。此外,还可以设置`IP_ADD
62 0
14.5 Socket 应用组播通信
|
7月前
|
Java
Java的Socket进行通信
下面是一个使用Java的Socket进行通信的简单示例
|
17天前
|
网络协议 Unix Linux
Socket通信详细介绍1
Socket通信详细介绍
28 0