您的位置:首页 > 理论基础 > 计算机网络

Java Socket(四)编程实现基于 TCP 的 Socket 通信

2015-12-27 10:02 786 查看

服务端

1、创建ServerSocket对象,绑定监听端口

2、通过accept()方法监听客户端请求

3、连接建立知乎,通过输入流读取客户端发送的请求信息。

4、通过输出流向客户端发送响应信息。

5、关闭相关资源。

服务器段的测试代码

[code]import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.InputStreamReader;  
import java.net.ServerSocket;  
import java.net.Socket;  
import java.util.logging.Level;  
import java.util.logging.Logger;  

/** 
 * 
 * @author whn6325689 
 */  
public class server {//服务器端  
    public static void main(String[] args) {  
        try {  
            //1.创建一个服务器端Socket,即serverSocket,指定绑定的端口,并监听此端口。  
            ServerSocket serverSocket=new ServerSocket(8888);  
            //2.调用serverSocket的accept()方法,等待客户端的连接  
            System.out.println("==服务器即将启动,等待客户端的连接==");  
            Socket socket=serverSocket.accept();  
            //3.获取输入流用来读取客户端所发出的登录信息  
            InputStream is=socket.getInputStream();//字节输入流  
            InputStreamReader isr=new InputStreamReader(is);//将字节流转化为字符流  
            //为字符流添加缓冲  
            BufferedReader bufferedReader=new BufferedReader(isr);  
            String info=null;  
            //循环读取客户端提交的信息  
            while((info=<span style="font-family: Arial, Helvetica, sans-serif;">bufferedReader.readLine()</span>)!=null){  
                System.out.println("我是服务器,客户端提交的信息是:"+info);  
            }  
            socket.shutdownInput();  
            //4.关闭相关的资源  
            bufferedReader.close();  
            is.close();  
            isr.close();  
            socket.close();  
            serverSocket.close();  
        } catch (IOException ex) {  
            Logger.getLogger(server.class.getName()).log(Level.SEVERE, null, ex);  
        }  
    }  
}


客户端

1、创建Socket对象,指明需要连接的服务器的地址和端口号。

2、连接建立知乎,通过输出流向服务器端发送请求信息。

3、通过输入流来获取服务器响应信息。

4、关闭相关资源。

客户端的代码

[code]import java.io.IOException;  
import java.io.OutputStream;  
import java.io.PrintWriter;  
import java.net.Socket;  
import java.util.logging.Level;  
import java.util.logging.Logger;  

/** 
 * 
 * @author whn6325689 
 */  
public class client {//客户端  
    public static void main(String[] args) {  
        try {  
            //1.创建客户端Socket,指定服务器地址和端口号  
            Socket socket=new Socket("127.0.0.1", 8888);  
            //2.获取输出流,用来向服务器发送信息  
              OutputStream os=socket.getOutputStream();//字节输出流  
              //转换为打印流  
              PrintWriter pw=new PrintWriter(os);  
              pw.write("用户名:admin;密码:admin");  
              pw.flush();//刷新缓存,向服务器端输出信息  
              //关闭输出流  
              socket.shutdownOutput();  
              //3.关闭资源  
              pw.close();  
              os.close();  
              socket.close();  
        } catch (IOException ex) {  
            Logger.getLogger(client.class.getName()).log(Level.SEVERE, null, ex);  
        }  
    }  
}


之后,先运行服务器端,运行结果:

==服务器即将启动,等待客户端的连接==

然后再运行客户端,无输出。此时再去查看服务器端类的输出,发现发生了变化:

==服务器即将启动,等待客户端连接==

我是服务器,客户端提交的信息是:用户名:admin;密码:admin
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: