1、建立服务器端工程和JAVA类,类程序的原代码为:
import java.io.*;
import java.net.*;
public class SocketServer {
// 为这个Socket选择一个断口8080:
public static final int PORT = 8080;
//public static final 用于声明一个变量,并且这个变量在程序中不能够改变。
public static void main(String[] args) throws IOException {
// public static void main(String[] args) :这是java程序的入口地址,java虚拟机运行程序的时候首先找的就是main方法.跟C语言里面的main()函数的作用是一样的.只有有main()方法的java程序才能够被java虚拟机欲行,可理解为规定的格式.
对于里面的参数及修饰符:
1.public:表示的这个程序的访问权限,表示的是任何的场合可以被引用,这样java虚拟机就可以找到main()方法,从而来运行javac程序.
2.static:表明方法是静态的,不依赖类的对象的,是属于类的,在类加载的时候main()方法也随着加载到内存中去
3.void:main()方法是不需要返回值的
4.main:约定俗成,规定的
5.String[] args:从控制台接收参数
throws IOException告诉编译器 我这个方法中间可能有些地方 要抛出异常
ServerSocket s = new ServerSocket(PORT);
ServerSocket s = new ServerSocket(PORT);相当于服务器启动了,并且监听了PORT(8080)
System.out.println("开始: " + s);
println 将它的参数显示在命令窗口,并在结尾加上换行符,将输出光标定位在下一行的开始。
try {
// 生成一个Socket等待连接请求
Socket socket = s.accept();
Socket socket = s.accept();等待客户端 连接PORT(8080)
try {
System.out.println(
"接受连接请求: " + socket);
BufferedReader in =
new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
BufferedReader in = new BufferedReader( new InputStreamReader(socket.getInputStream()))
是从client.getInputStream()获取一个输入流in,,,BufferenReader是字符流,inputStream是字节流,要用字节流构造字符流,中间要用一个转换流InputStreamReader
// 定义一个PrintWriter对象写输出流
PrintWriter out =
new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(
socket.getOutputStream())), true);
while (true) {
String str = in.readLine();
if (str.equals("END")) {
break;
}
System.out.println("自客户端: " + str);
out.println(str);
}
// 关闭socket
}
finally {
System.out.println("关闭...");
socket.close();
}
}
finally {
s.close();
}
}
}