疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java中利用socket实现简单的通信


 

   Java中利用socket实现简单的服务端与客户端的通信

  Java编程中,要想要使用网络通信,就离不开Socket编程,在此对socket进行简单的介绍。首先声明,这是一个入门级的介绍,仅仅简单的实现了客户端向服务端发送数据,服务端正常的接收数据,当接收到特定的数据时,服务端和客户端都关闭,一个服务端对应一个客户端,不涉及多线程等内容,一切都是最简单最基础的知识点。

  下面给出的代码,可以直接拷贝到eclipse中运行, 无需任何更改。

  关于socket和seversocket的原理以及构造函数等一些简单的介绍,可以查看其他的一些博客,期中写的比较清晰,我给大家推荐一个[Java]Socket和ServerSocket学习笔记。期中关于socket的通信原理和需要基本了解的一些构造函数,常用函数等,都进行了简单的介绍。

  开发环境为eclipse,新建两个普通的Java工程,一个命名为server_1,作为服务端,另一个命名为client_1,作为客户端,完成的功能就是在客户端的控制台输入内容后,客户端将内容发送至服务端,在服务端的控制台可以看到输入的内容,当输入的内容为shutdown时,服务端和客户端都关闭通信,通信结束。

  服务端代码:

  package server_1;

  import java.io.BufferedReader;

  import java.io.IOException;

  import java.io.InputStreamReader;

  import java.io.PrintWriter;

  import java.net.ServerSocket;

  import java.net.Socket;

  public class server_1 {

  public static void main(String[] args) throws IOException { //将异常全部抛出

  ServerSocket server = new ServerSocket(10000); //用serversocket来启动服务器,并指定端口号

  System.out.println("服务器启动。。。");

  Socket socket = server.accept(); //获取客户端的socket信息

  BufferedReader in = null;

  in = new BufferedReader(new InputStreamReader(socket.getInputStream())); //启动缓冲区

  while (true) {

  String msg = in.readLine(); // 将客户端发送来的信息存储在msg中

  System.out.println(msg);

  if (msg.equals("shutdown")) { //客户端如果发送的是shutdown,就关闭客户端

  break;

  }

  }

  in.close(); //执行相应的关闭操作

  }

  }

  考虑这是一个入门级的程序,所以暂时不考虑各种异常情况,咋mian函数的后面就讲各种异常抛出。

  建立seversocket,并且指定服务器的端口号为10000,此时服务器端开始运行。(端口号尽量取大于1024的数字,小于1024的一般都是系统程序占用)

  然后利用socket实现和客户端的连接。

  in是一个输入缓冲区,客户端发送来的信息就暂时存储在这个缓冲区中。

  然后用while语句,循环的监听客户端发送过来的数据,当是一般信息时,就讲客户端发来的内同打印到控制台,如果是“shutdown”,则关闭服务器端,此次通信终止。

  客户端程序:

  package client_1;

  import java.io.BufferedReader;

  import java.io.InputStreamReader;

  import java.io.PrintWriter;

  import java.net.Socket;

  public class client_1 {

  public static void main(String[] args) throws Exception {

  System.out.println("客户端启动");

  Socket socket = new Socket("localhost", 10000); //启动socket,并连接本地主机的相应端口号

  PrintWriter out = new PrintWriter(socket.getOutputStream());

  BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));//从控制台获取输入的内容

  //不断的获取输入的内容,并不断的发送给服务器,当输入shutdown时,跳出循环,停止运行

  while (true) {

  String msg = reader.readLine();

  out.println(msg);

  out.flush();

  if (msg.equals("shutdown")) {

  break;

  }

  }

  //执行相应的关闭操作

  socket.close();

  out.close();

  reader.close();

  }

  }

  同样也是在main函数后就抛出所有的异常,不考虑一些比较复杂的异常情况。

  建立socket来准备进行通信,指定服务端的位置为“localhost”(也就是本机,也可以使用IP:127.0.0.1),端口号要和服务器端的端口号对应,为10000。

  建立reader为缓冲区,将控制台输入的内容先存储到缓冲区中。

  建立out用来发送数据。

  通过while循环监听控制台,通过socket将缓冲区的内容发送到服务端,如果输入的是一般结果,则将内容发送给服务端,如果输入的时“shutdown”,则将内容发送后跳出循环, 此次通信结束。

  以上就是关于socket通信的一个非常简答的例子。