黑马程序员——网络编程

来源:互联网 发布:中草药识别软件下载 编辑:程序博客网 时间:2024/06/18 01:10

(一)网络编程:

1.网络模型分为两大类:OSI参考模型、TCP/IP参考模型

2.OSI参考模型分为七层:从上到下分别为,应用层,表示层,会话层,传输层,网络层,数据链路层,物理层;

3.TCP/IP参考模型分为四层::应用层,传输层,网际层,主机至网络层

其实在网路编程涉及的在传输层和网际层,做web开发在应用层。

网络通讯要素:ip地址,端口号(0~65535),传输协议

网络编程涉及用到Java.net.*;包

对IP 的类中InetAddress类 的地址的操作几个常用方法:

getLocalHost ,获取主机信息

getHostAddress(),获取主机地址

getHostName(),获取主机名称



传输协议(重点):

UDP:面向无连接的,数据包在64k以内,速度快,的不可靠协议,例如聊天软件的数据传输。

TCP:建立连接,大量数据传输,通过三次握手完成,可靠,效率稍低

Socket机制:为网络服务的一直机制,

特点:

(1)通信 的两端都有Socket

  (2)网络通信其实就是Socket间的通信

(3)数据在两个Socket间通过IO传输


UDP的传输Socket 建立方式和步骤:


1)建立发送端,接收端

2)建立数据包

3)调用Socket的发送接收方法

4)关闭Socket 

注意的是发送端和接收端是连个个独立运行的程序。

实例代码:

发送端:

import java.io.*;
import java.net.*;
class  UdpSend
{
public static void main(String[] args)  throws Exception
{

DatagramSocket ds =new DatagramSocket();
        
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
String line=null;
while((line=bufr.readLine())!=null)
{
   if("886".equals(line))
  break;
             byte[] buf=line.getBytes();            
    DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("172.12.3.73"),10000);
    ds.send(dp);
}
ds.close();
}
}


接收端:

class  UdpRece
{
public static void main(String[] args)  throws Exception
{
//1,建立udpsocket建立端点
DatagramSocket ds =new DatagramSocket(10000);  
 while(true)
{
               //定义数据包用来存储数据
byte[] buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,buf.length);
        //通过服务的recevice方法将接受的数据存入数据包中
ds.receive(dp);
//通过数据包的方法获取其中的数据
         String ip=dp.getAddress().getHostAddress();
String data=new String(dp.getData(),0,dp.getLength());
int port=dp.getPort();
System.out.println(ip+"::"+data+"::"+port);
 }
//关闭资源
// ds.close();
}
}


TCP传输:

分为客户端和服务端:

ServerSocket ,Socket

步骤:

(1)首先建立客户端和服务端

(2)建立连理连接后,通过Socket中的IO流进行数据传输

(3)关闭socket


实例代码:

客户端建立步骤:

1,建立socket服务,指定要连接的主机和端口
2,获取socket流中的输出流,将数据写在该流中通过忘了发送给服务端
3,获取socket流中的输入流,将服务端反馈的数据获取并打印
4,关闭客户端资源

*/
class  TcpClient2
{
public static void main(String[] args) throws Exception
{
        Socket s=new Socket("127.0.0.1",10200);
    OutputStream out=s.getOutputStream();
    out.write("服务端你好".getBytes());
            InputStream in= s.getInputStream();
    byte[] buf=new byte[1024];
    int len =in.read(buf);      
System.out.println(new String(buf,0,len));
s.close();
}
}
class  TcpServer2
{
public static void main(String[] args)  throws Exception
{
        ServerSocket ss=new ServerSocket(10200);
Socket s=ss.accept();
String ip=s.getInetAddress().getHostAddress();
         System.out.println(ip+".....connected");
InputStream in=s.getInputStream();
  
        System.out.println(ip);
byte[] buf=new byte[1024];
int len=in.read(buf);
System.out.println(new String(buf,0,len));
OutputStream out =s.getOutputStream();
Thread.sleep(10000);
out.write("收到,你也好".getBytes());
s.close();
ss.close();

}
}


上传图片的实现:

步骤:客户端

(1)建立服务端点

(2)读取客户端已有的图片数据

(3)通过socket输出流将数据发给服务端

(4)读取服务端反馈信息

(5)关闭


步骤:服务端

(1)建立服务端点

(2)速取socket流中的数据

(3)将读取的数据写入到文件中去(用缓冲区存)

(4)给客户端一个反馈表示上传成功。

(5)关闭流


注意:在写网络编程的时候必定会用到 java.io.*;java.net.*;包


自我心得:在该段学习中主要是知道UDP和TCP两种不同的传输方式,各自都有各自的特点,了解在什么情况下使用哪种方式传输。然后重要的就是在操作接收端和服务端的操作具体步骤,明确每一步的作用,是用来干什么的。之前在学习这部分知识的时候都弄明白了,但是过了一段时间之后,忘得差不多; ,通过这次总结让我又重新拾起忘记的知识。


0 0
原创粉丝点击