网络编程简单总结
博客专区 > Edenjia 的博客 > 博客详情
网络编程简单总结
Edenjia 发表于1年前
网络编程简单总结
  • 发表于 1年前
  • 阅读 19
  • 收藏 0
  • 点赞 0
  • 评论 0

移动开发云端新模式探索实践 >>>   

在计算机网络中,位于同一个网络的计算机在进行连接和通信时需要遵守一定的规则,这些连接与通信的规则被称为网络通信协议;目前应用最广泛的也就是基于TCP/IP协议;

TCP/IP协议中的四层分为应用层、传输层、网络层、链路层。其中,网络层是整个TCP/IP协议的核心,它主要是用于将传输的数据进行分组,将分组的数据发送到目标计算机或者网络;而运输层主要使网络程序进行通信,主要采用TCP协议或者UDP协议;

通过IP地址我们可以连接到指定的计算机,但如果我们要访问目标的计算机的某个程序,我们还需要指定端口号;

下面我将简单的介绍java中几个比较简单的类

1、InetAddress类,通过这个InetAddress类的一些常用方法我们可以得到关于IP地址的相关信息;

(1)、InetAddress getByName(String host);//参数host表示指定的主机,用于在给定主机名的情况下确定主机的IP地址;

(2)InetAddress getLocalHost();//创建一个表示本地主机的InetAddres对象

(3)String getHostName();//获取IP地址的主机名

(4)boolean isReachable(int timeout);//判断指定时间内可否达到;

(5)String getHostAddress();//得到字符串格式的IP地址

InetAddress innet = InetAddress.getLocalHost();//创建InetAddress对象
//指定主机,的InetAddress对象
InetAddress remoteAddress = InetAddress.getByName("www.baidu.com");
System.out.println("本机的Ip地址:"+innet.getHostAddress()); //得到Ip地址
System.out.println("远程的ip地址:"+remoteAddress.getHostAddress());
System.out.println("3秒可到达:"+remoteAddress.isReachable(3000));
System.out.println("远程主机名:"+remoteAddress.getHostName());//获得主机名

2、UDP通信

    UDP是无连接的通信协议,即在数据连接时,数据的发送端和接收端不建立逻辑连接。UDP协议的消耗资源比较小,通信效率高,可用于音频,视频,普通的数据的传输;

(1)DatagramPacket类,这个可以简单地理解为一个箱子,用于封装UDP通信中发送和接受的数据。

方法:DatagramPacket(byte[] buff,int length) ;//用于接收端,

         DatagramPacket(byte[] buff,int offset,int length) ;//用于接收端

         DatagramPacket(byte[] buff,int length,InetAddress addr,int port) ;//用于发送端

         DatagramPacket(byte[] buff,int offset,,int length,InetAddress addr,int port) ;//用于发送端

         InetAddress getAddress();//返回对方的Ip地址。

        int getPort();//返回对方的端口号

       byte[] getData;//返回将要接受或者发送的数据

  (2)DatagramSocket类,使用这个类的实例可以发送和接受Datagrampacket数据包

 方法:DatagramSocket(int port);//可用于接受端或者发送端,指定端口号   

         DatagramSocket(int port,InetAddress addr);//可用于接受端或者发送端,指定端口号,还指定相应的IP

        void receive(DatagramPacket p);//只有接受数据包时才会返回,否则处于阻塞状态

       void  send(DatagramPacket p);//发送数据包

简单代码示例:

package udp;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

//基于UDP通信
//接收端
public class Exam1 {

	public static void main(String[] args) throws Exception {
		byte[] buff = new byte[1024];//建立一个字节数组用于接受数据
		DatagramSocket datagramSocket = new DatagramSocket(8954);//监听的端口号是8954
		DatagramPacket datagramPacket = new DatagramPacket(buff, 1024);//用于接收数据
		System.out.println("等待接受数据");
		datagramSocket.receive(datagramPacket);
        String str = new String(datagramPacket.getData(), 0, datagramPacket.getLength()) + "from " + datagramPacket.getAddress().getHostAddress()
        		   +"端口号: "+datagramPacket.getPort();
        System.out.println("接受的数据为:"+str);
        datagramSocket.close();
	}

}
package udp;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.UnknownHostException;

//发送端
public class Exam02 {

	public static void main(String[] args) throws Exception {
		DatagramSocket socket = new DatagramSocket(3000);//创建一个对象
		String str = "hello word";
		//指定发送数据的内容,长度,InetAddress的对象,端口
		DatagramPacket datagramPacket = 
				new DatagramPacket(str.getBytes(), str.length(),InetAddress.getByName("localhost"),8954);
        socket.send(datagramPacket);//发送
        socket.close();
	}

}

3、TCP通信

TCP协议是面向连接的通信协议。在TCP通信中,需要明确客户端和服务器端,每次创建都需要“三次握手”,第一次,客户端向服务器端发出连接请求,等待服务器端确认,第二次,服务端向客户端回送一个响应,通知客户端收到连接请求,第三次握手,客户端再次向服务器端发送确认消息,确认连接。

(1)ServerSocket类, 表示服务器端。

方法:ServerSocket(int port);//创建一个对象,将其绑定到一个指定端口号上;

         ServerSocket(int port,int backlog);//创建一个对象,将其绑定到一个指定端口号上;backlog表示服务器忙时,可以与之保持连接请求的等待客户数量,如果没有指定,默认值为50

       ServerSocket(int port,int backlog,InetAddress bindAddr);//创建一个对象,在上一个方法上多个IP;

      Socket accept();//用于与客户端连接

      InetAddress getInetAddress();//返回一个InetAddress对象,该对象封装了ServerSocket对象的IP地址

      void bind(SocketAddress point);//用于绑定指定的Ip地址和端口号

2、Socket 类,用于客户端

    Socket(String host,int port);//根据参数去连接指定的地址和端口上的运行程序

   Socket(InetAddress ,iint port);//与上一个方法类似

    int getPort();//返回端口号

    InetAddress getLocalAddress();//获取Socket的Ip地址,并将Ip地址封装返回

    InputStream getInputStream() 和OutputStream getOutputStream();//用户客户端接受数据和向服务器端发送数据;

简单代码实例:

package tcp;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;


//TCP通信,服务端
public class TCPServer {

	public static void main(String[] args) throws Exception {
		//定义一个端口号
		int port = 9000;
		//创建ServerSocket对象
		ServerSocket serverSocket = new ServerSocket(port);
		//接收数据
		Socket socket = serverSocket.accept();
		//获取客户端的输出流
		OutputStream outputStream = socket.getOutputStream();
		System.out.println("开始与客户端交互数据");
		outputStream.write(("hello world").getBytes());
		Thread.sleep(1000);
		
		//读取客户端的数据
		InputStream inputStream = socket.getInputStream();
		byte[] by = new byte[1024];
		int len = inputStream.read(by);
		System.out.println("客户端发来的数据:"+new String(by,0,len));
		
		System.out.println("与客户端结束交互数据");
		outputStream.close();
		socket.close();

	}

}
package tcp;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
//客户端
public class Client {

	public static void main(String[] args) throws Exception {
		int port = 9000;//端口号要与服务端一样
		//创建一个socket对象,指定地址和端口号
		Socket socket = new Socket(InetAddress.getLocalHost(), port);
		//接受数据
		InputStream inputStream = socket.getInputStream();
		byte[] buff = new byte[1024];
		int len = inputStream.read(buff);
		System.out.println("接受到的数据:"+new String(buff,0,len));
		
	     //向服务端发送数据
		OutputStream outputStream = socket.getOutputStream();
		outputStream.write(("hi sir").getBytes());
		
		socket.close();
	}

}

 

标签: TCP UDP 网络编程
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 0
博文 2
码字总数 2453
×
Edenjia
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: