学习Java第二十五天
实现步骤:
1、创建一个本地字节收入流FileInputStream对象,构造方法中绑定读取的数据源
2、创建一个socket对象,构造方法中绑定服务器的IP地址和端口号
3、使用socket中的方法getoutputStream获取网络字节输出流
4、使用本地字节输入流中的read方法,读取本地文件
5、使用网络输出流中的write方法,把读取到的文件上传到服务器
6、使用socket中的方法,获取输入流对象
7、通过网络输入流对象中的read反复,读取回写数据
8、释放资源
package demo02FileUpload.copy;
import java.io.;
import java.net.;
public class tcpServer {
public static void main(String[] args) { // TODO Auto-generated method stub try { ServerSocket ss=new ServerSocket(8888); //服务器侦听客户端对象 Socket s1=ss.accept(); //服务器发送给客户端信息 OutputStream ops=s1.getOutputStream(); ops.write("hello,world!".getBytes()); //服务器接收信息,并且打印信息 InputStream ips=s1.getInputStream(); //字节流转换为字符流 BufferedReader bfr=new BufferedReader( new InputStreamReader(ips)); //只要读到一行内容就返回,不管信息多少,因此信息会 遗失掉 //我们应程序使得不管一行或者多行,读取效果应该一样 //byte[] buff=new byte[1024]; //int len=ips.read(buff); System.out.println(bfr.readLine()); //关闭链接 //ips.close(); bfr.close(); ops.close(); s1.close(); ss.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }
}
一、JAVA网络编程概述
网络应用程序,就是在已实现网络互联的不同计算机上运行的应用程序,这些程序之间可以相互交换数据。JAVA是优秀的网络编程语言,Java网络编程的类库位于java.net包中。Java支持TCP/UDP及其上层的网络编程,对TCP/UDP以下层,如IP包的捕获,侦听,数据链路层的帧的捕获,需要借助第三方的java包,如UNIX/Linux下著名的libpcap包的Java版本jpcap包。
在网络编程中,服务器与客户程序只需关心发送什么样的数据给对方,而不必考虑如何把这些数据传输给对方,传输数据的任务由计算机网络完成。两个进程顺利通信的前提条件是它们所在的主机都连接到了计算机网络上。网络协议是网络中主机之间通信的语言。不同网络之间的互联靠网络上的标准语言——TCP/IP协议。
二、TCP网络编程
1.OSI参考模型
OSI参考模型把网络分为7层,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。不同主机之间的相同层称为对等层。
物理层:为上一层提供物理连接,以及规定通信节点之间的机械和电气特性。数据作为原始的比特(bit)流传输。
数据链路层:数据链路层负责在两个相邻节点间的线路上,无差错地传送以帧为单位的数据。典型设备是交换机。
网络层:选择合适的网间路由和交换节点,确保数据及时传送到目标主机。典型设备是路由器。
传输层:根据通信子网的特性最佳地利用网络资源,为两个端系统的会话层提供建立、维护和取消传输连接的功能,以可靠方式或不可靠方式传输数据。信息的传送单位是报文。
会话层:管理进程间的会话过程,即负责建立、管理、终止进程间的会话。数据传送单位是报文。
表示层:对上层数据进行转换,以保证一个主机的应用层的数据可以被另一个主机的应用层理解。数据传送单位是报文。
应用层:确定进程间通信的实际用途,以满足用户实际需求。
发送方每一层会给上一层传递来的数据加上一个信息头。接收方每一层会把信息头去掉。对等层之间互相通信需要遵守一定的规则,如通信的内容和通信的方式,这种规则称为网络协议。TCP/IP参考模型分为4个层次:应用层、传输层、网络互联层和主机-网络层。