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通信的一个非常简答的例子。
2015年11月19日 西安交通大学