关于java网络编程socket的回顾

关于java网络编程这块,是每个入门的开发者在初学java的时候都会接触的一个知识点,在此之前的要求就是必须得弄明白java繁多的各种IO流,所以在java网络编程这一块设计到大量的流操作,原因很简单,因为网络编程所做的工作基本就是数据的交互,在数据的交互中就产生了大量的IO流的读写。

在此之前有必要过一下底层网络的一些基础知识,关于计算网络体系结构与常规协议一图概括:

在这里插入图片描述

目前对于常见的web开发者来说,主要的网络编程作用在TCP/IP概念层模型的应用层,对于一些硬件或嵌入式,或Linux开发者来说,主要的网络编程作用在传输层。

在网络编程的世界,就是通过相关的技术和协议来规定数据在各层规定的模型传输,来到达数据的交互。如果需要精确的交互,还需要数据的传输具有目的性,而URL就是让数据具有目的性的保证。

URL(Uniform Resource Locator):www的统一资源定位符。主要由4部分组成:协议 、存放资源的主机域名、资源文件名和端口号。如果未指定该端口号,则使用协议默认的端口。例如http 协议的默认端口为 80。它的主要作用就是在www上,让每一信息资源都有统一且唯一的地址。

(注:URI(统一资源标准符) = URL + URN(统一资源命名))

在java.net包中提供了URL类,该类封装了大量复杂的涉及从远程站点获取信息的细节。

SOCKET: 我们开发的网络应用程序位于应用层。对于java开发者来说,在应用层使用socket套件字进行网络模块功能的开发是最常见的。因为socket是传输层供给应用层的编程接口。Socket就是应用层与传输层之间的桥梁。使用Socket编程可以开发客户机和服务器应用程序,可以在网络上进行通信。个人觉得重点还是提供了接口,使得我们不用关注底层的实现。(此接口在java.net.Socket包中)

//客户端小demo
public class ClientSocket {
 public static void main(String args[]) {
    String host = "127.0.0.1"; //消息传输的目的地IP
    int port = 8919; 消息传输的目的地端口
    try {
     Socket client = new Socket(host, port);
     Writer writer = new OutputStreamWriter(client.getOutputStream());
     writer.write("Hello From Client");
     writer.flush();
     writer.close();
     client.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
  }
  
}
//服务端小dome
public class ServerClient {
 public static void main(String[] args) {
    int port = 8919;//服务端监听的端口,如果有数据过来就读取
    try {
      ServerSocket server = new ServerSocket(port);
      Socket socket = server.accept(); //阻塞等待客户端发来消息
      Reader reader = new InputStreamReader(socket.getInputStream());
      char chars[] = new char[1024];
      int len;
      StringBuilder builder = new StringBuilder();
      while ((len=reader.read(chars)) != -1) {
        builder.append(new String(chars, 0, len));
      }
      System.out.println("Receive from client message=: " + builder);
      reader.close();
      socket.close();
      server.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
 }
}

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值