您的位置:首页 > 其它

使用简单的ServiceSockt实现服务端与客户端的通信

2017-02-13 00:17 459 查看
在客户/服务器通信模式中, 服务器端需要创建监听端口的 ServerSocket, ServerSocket 负责接收客户连接请求. 我们模拟用eclipse模拟服务端,用windows的命令行界面来模拟客户端。

我们的电脑一般没有开启telnet服务,我们先在电脑上开启telnet服务,我的电脑(windows10)下面如何开启telnet如下图所示



我们先写一个方法,相当于在客户端向服务端发送消息,而服务端只能接受消息无法发送消息

public static void test1() {
try {
//          创建一个服务端,我们监听8888的端口
ServerSocket serverSocket =new ServerSocket(8888);
//          等待客户端连接过来
Socket socket= serverSocket.accept();

//          将客户端的内容放入流中,然后将流用Scanner包住
InputStream is=socket.getInputStream();
Scanner scanner=new Scanner(is);
//          将流中的内容读取出来,输入到控制台(服务端)
while(scanner.hasNextLine()){
System.out.println(scanner.nextLine());
}
scanner.close();
is.close();
socket.close();
serverSocket.close();

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


我们来测试一下这个方法是否有用,打开windows命令行界面输入“telnet 192.168.20.152 8888”,192.168.20.152是我的ip,8888是我开放的端口



在按住ctrl + [+] ,最后按住enter,就可以在上面显示文字了,不然不会显示出来的。



这个方法写的是成功的,实现了我们想要的功能



客户端和用户端实现相互通讯的方法,但是有缺陷,只能一问一答

//  客户端和用户端实现相互通讯的方法,但是有缺陷,只能一问一答
public static void test3() {
ServerSocket serverSocket;
try {
serverSocket = new ServerSocket(8888);
Socket socket=serverSocket.accept();
//          简单一点,将is流直接传入到Scanner里面,服务端的输入
Scanner severScanner=new Scanner(System.in);
//          客户端的outputStream
PrintWriter socketPrint=new PrintWriter(socket.getOutputStream());

//          客户端的inputStream
Scanner socketScanner=new Scanner(socket.getInputStream());

while(severScanner.hasNextLine()){
//              服务端向客户端输出消息
socketPrint.println(severScanner.nextLine());
socketPrint.flush();
//              如果
if(socketScanner.hasNextLine()){
System.out.println(socketScanner.nextLine());
}

}

//

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


测试的结果


最后实现客户端向服务端传送命令,从服务端获取文件的内容,在传输到客户端

public static void test5() {
try {
ServerSocket serverSocket=new ServerSocket(8888 );
Socket socket=serverSocket.accept();

//          客户端的输入流
Scanner socketScanner=new Scanner(socket.getInputStream());
//          服务端的输入流
Scanner serverScanner=new Scanner(System.in);
//          客户端的输出流
PrintWriter socketPrintWrite=new PrintWriter(socket.getOutputStream());

while(socketScanner.hasNextLine()){
String FileName=socketScanner.nextLine();
Scanner file=getFile(FileName);

while(file.hasNextLine()){
String str=file.nextLine();
socketPrintWrite.println(str);
socketPrintWrite.flush();

}
file.close();
}
socketScanner.close();
serverScanner.close();
socketPrintWrite.close();

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

//这个方法是获取文件的内容
public static Scanner getFile(String FileName) {
Scanner scanner = null;
try {
scanner=new Scanner( new FileInputStream(FileName));

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(scanner!=null);
return scanner;
}


当我们输入C:/Users/caowa/workspace/ServiceSockt/src/com/ServiceSockt/ServiceSockt.java这条指令时,就会获取一个java文件的详细内容返回给我们

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐