java网络编程只要有两个大的方面,一个是通过UDP(数据报传输协议),它使用的实现技术是DatagramSocket和DatagramPacket来建立连接,对数据进行发送和接受,但是UDP是不保证数据的完整性和可靠性,发出方不管接收方是否已经准备好,相当于寻呼机模式,因此安全性不高;还有一种就是通过TCP协议进行传输,TCP是一种可靠性连接,通过建立客户端和服务器端的连接来保证数据的完整性和安全性,因此应用要广泛。
下面是一个经典的面试题,通过JavaSocket来读取客户端字符显示到服务器端,一般看到这个题目,马上会想到利用ServerSocket和Socket来建立连接,然后再通过InputSteamReader和OutputStreamReader来对数据进行流处理,这里还用到了BufferedReader和in.readLine()是用来做一个缓冲和整行读取的功能,利用System.in来获取键盘输入。
程序清单: Server.java ;Client.java 程序测试通过
package
test;
import java.io. * ;
import java.net. * ;
/** */ /**
* 面试题:读取服务器几个字符,在从本地显示
* 服务器端程序。
*/
public class Server
... {
private ServerSocket ss;
private Socket socket;
private BufferedReader in;
private PrintWriter out;
public Server() //构函
...{
try
...{
ss = new ServerSocket(10000); //port is 10000
while(true) //这不算是死循环吗?
...{
socket = ss.accept(); //接受连接
String RemoteIp = socket.getInetAddress().getHostAddress(); //ip
String RemotePort = ":"+socket.getLocalPort(); //port
System.out.println("A client come in ! IP:"+RemoteIp+RemotePort);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//in 为读取缓冲流,从客户端读取
String line = in.readLine(); //把in流转换成String
System.out.println("Client send is:"+line);
out = new PrintWriter(socket.getOutputStream(),true); //true指定是否缓冲
out.println("Your Message Recevied !");
out.close();
in.close();
socket.close();
}
}
catch(IOException e)
...{
out.println("wrong...");
}
}
public static void main(String[] args)
...{
new Server();
}
}
import java.io. * ;
import java.net. * ;
/** */ /**
* 面试题:读取服务器几个字符,在从本地显示
* 服务器端程序。
*/
public class Server
... {
private ServerSocket ss;
private Socket socket;
private BufferedReader in;
private PrintWriter out;
public Server() //构函
...{
try
...{
ss = new ServerSocket(10000); //port is 10000
while(true) //这不算是死循环吗?
...{
socket = ss.accept(); //接受连接
String RemoteIp = socket.getInetAddress().getHostAddress(); //ip
String RemotePort = ":"+socket.getLocalPort(); //port
System.out.println("A client come in ! IP:"+RemoteIp+RemotePort);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//in 为读取缓冲流,从客户端读取
String line = in.readLine(); //把in流转换成String
System.out.println("Client send is:"+line);
out = new PrintWriter(socket.getOutputStream(),true); //true指定是否缓冲
out.println("Your Message Recevied !");
out.close();
in.close();
socket.close();
}
}
catch(IOException e)
...{
out.println("wrong...");
}
}
public static void main(String[] args)
...{
new Server();
}
}
客户端程序: Client.java
package
test;
import java.net. * ;
import java.io. * ;
/** */ /**
* 面试题:读取服务器几个字符,在从本地显示
* 客户端程序。
*/
public class Client
... {
Socket socket;
BufferedReader in;
PrintWriter out;
public Client()
...{
try
...{
System.out.println("Try to Connect to localhost/127.0.0.1:10000");
socket = new Socket("127.0.0.1",10000); //建立和ServerSocket的连接
System.out.println("The Server Connected !");
System.out.println("Please Enter some Character .");
BufferedReader line = new BufferedReader(new InputStreamReader(System.in));
out = new PrintWriter(socket.getOutputStream(),true);
out.println(line.readLine()); //按行输出
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println(in.readLine()); //按行输入
out.close();
in.close();
socket.close();
}
catch(IOException e)
...{
out.println("wrong ...");
}
}
public static void main(String[] args)
...{
new Client();
}
}
import java.net. * ;
import java.io. * ;
/** */ /**
* 面试题:读取服务器几个字符,在从本地显示
* 客户端程序。
*/
public class Client
... {
Socket socket;
BufferedReader in;
PrintWriter out;
public Client()
...{
try
...{
System.out.println("Try to Connect to localhost/127.0.0.1:10000");
socket = new Socket("127.0.0.1",10000); //建立和ServerSocket的连接
System.out.println("The Server Connected !");
System.out.println("Please Enter some Character .");
BufferedReader line = new BufferedReader(new InputStreamReader(System.in));
out = new PrintWriter(socket.getOutputStream(),true);
out.println(line.readLine()); //按行输出
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println(in.readLine()); //按行输入
out.close();
in.close();
socket.close();
}
catch(IOException e)
...{
out.println("wrong ...");
}
}
public static void main(String[] args)
...{
new Client();
}
}