用ServerSocket类与Socket类实现客户端与服务端的交互
2017-04-09 22:58
399 查看
ServerSocket类,此类实现服务端的套接字,Socket类,此类实现客户端的套接字,而套接字就是两台机器间通信的端点,所以就用ServerSocket类和Socket类实现客户端与服务端的交互,下面先来查看ServerSocket类的api
看到构造方法,首先想到要使用要先new一个,然后方法里可以绑定dao特定端口,这里以端口8888为例,创建一个服务端监听8888端口,然后获取连接着的ip地址,输出连接的地址,代码如下public static void test1() {
try {
ServerSocket ss = new ServerSocket(8888);
Socket sk = ss.accept();
//获取连接的ip地址
System.out.println(sk.getInetAddress());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}可以通过电脑自带的命令提示符使用telnet命令连接测试,命令telnet加上ip加上端口号就可以连接了
上面通过使用ServerSocket返回一个Socket,然后我们通过查看Socket的api看到可以获取一个输入流,然后用Scanner包装,获取我们输入的内容,然后用while循环,然后在控制台输出内容
public static void test2() {
try {
System.out.println("服务已启动");
ServerSocket ss = new ServerSocket(8888);
Socket s = ss.accept();
System.out.println(s.getInetAddress());
InputStream is = s.getInputStream();
Scanner sc = new Scanner(is);
while (sc.hasNextLine()) {
String str = sc.nextLine();
System.out.println(str);
}
s.close();
is.close();
sc.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}然后还是跟上个方法一样,连接上服务端,输入telnet ip地址 端口然后回车
会出现如下黑色界面,按“ctrl+]”
会出现如下界面,继续按回车
然后出现如下界面,我们输入的内容才能在命令提示符里显示出来
上面的代码方法使我们能在服务端发消息给客户端,而客户端不能发消息给服务端,下面介绍客户端能发消息给服务端,服务端不能发消息给客户端,我们new一个ServerSocket,然后监听8888端口,然后用Socket获取一个输出流(把我们在控制台写的内容输出到服务端),然后new一个scanner来包装System.in(获取键盘的输入流),然后把键盘的输入流输出到客户端
public static void test3() {
try {
System.out.println("服务启动");
ServerSocket ss = new ServerSocket(8888);
Socket socket = ss.accept();
PrintWriter pw = new PrintWriter(socket.getOutputStream());
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()){
String str = sc.nextLine();
pw.println(str);
pw.flush();
}
socket.close();
sc.close();
pw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
可以看到只能控制台发送消息,而服务端发送消息无效,接下来介绍在服务端能发送接收消息,客户端也能接收发送消息,新建两个类
在ServerSocket(服务端)里输入以下代码,既获取输入流又获取输出流,然后读取键盘输入的内容
public static void test1() {
try {
ServerSocket ss = new ServerSocket(8888);
while(true){
Socket socket = ss.accept();
Scanner scanner = new Scanner(socket.getInputStream());
PrintWriter pw = new PrintWriter(socket.getOutputStream());
while(scanner.hasNextLine()){
String str = scanner.nextLine();
System.out.println(str);
Scanner s = new Scanner(System.in);
if (s.hasNextLine()) {
String msg = s.nextLine();
pw.println(msg);
pw.flush();
}
}
socket.close();
scanner.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}然后在Socket(客户端)里输入以下代码,既获取输入流又获取输出流,然后获取键盘输入的内容
public static void test1(){
try {
Socket socket = new Socket("自己的ip地址xxx.xxx.xxx.xxx", 8888);
Scanner scanner = new Scanner(socket.getInputStream());
PrintWriter pw = new PrintWriter(socket.getOutputStream());
Scanner s = new Scanner(System.in);
while(s.hasNextLine()){
String str = s.nextLine();
if (str.equals("exit")) {
System.out.println("我要退出了");
socket.close();
s.close();
System.exit(0);
}
pw.println(str);
pw.flush();
String msg = scanner.nextLine();
System.out.println(msg);
}
s.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
在以上两个类里写好后先启动ServerSocket,然后再启动Socket,就可以实现服务端与客户端的一来一去对讲功能
相关文章推荐
- 【Jetty Server 开发系列之一】搭建Jetty Server环境&&Http客户端实现交互
- 【Jetty Server 开发系列之一】搭建Jetty Server环境&&Http客户端实现交互
- C# 利用Socket类实现客户端和服务器之间的通信,可在本机之间实现信息交互
- 基于 IdentityServer3 实现 OAuth 2.0 授权服务【客户端模式(Client Credentials Grant)】
- (三)Java EE 5实现Web服务(Web Services)及多种客户端实例-瘦客户端
- (二)Java EE 5实现Web服务(Web Services)及多种客户端实例-实现Web服务
- 在客户端调用MOSS的搜索服务,实现更加灵活的搜索控制
- 由 TIdTCPServer 提供客户端安装程序 WEB 下载的实现方法
- WEB客户端用ASP实现WEB服务的小例
- (一)Java EE 5实现Web服务(Web Services)及多种客户端实例-原理
- (六)Java Ee平台上实现Web服务及多种客户端实例-小结
- 用多路复用I/O模型实现支持多个客户端的通信服务
- asp实现保值的技巧(客户端javascript与服务端的相关交互)
- 用Socket类实现HTTP协议客户端应用
- 用Http Invoker实现RCP客户端与后台的交互 推荐
- SMS Client-Server (短信服务客户机与服务器的实现)(要好好研究)
- Linux UDP Server and Client Sample.Linux 下 UDP 服务和客户端程序示例
- 如何:使用回调方法实现异步 Web 服务客户端
- WebSphere Web 服务交互的 .Net 客户端
- (二)Java EE 5实现Web服务(Web Services)及多种客户端实例-实现Web服务