首页 > 编程语言 > 详细

mooc_java Socket

时间:2015-11-15 23:04:38      阅读:389      评论:0      收藏:0      [点我收藏+]

Socket通信,TCP协议是面向连接,可靠的,有序的,以字节流的方式发送数据;
基于TCP协议实现网络通信的类
客户端的Socket类 服务器端的ServerSocket类

 技术分享

技术分享

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

实现基于TCP的Socket通信:

在服务器端,创建ServerSocket对象,绑定监听端口;通过accept方法监听客户请求;建立连接后,通过输入流读取客户端发送的请求;通过输入流向客户端发送响应信息;关闭相关资源。

public class Server {
public static void main(String[] args) {
    try {
        //创建一个服务器端Socket,指定绑定的端口,
        ServerSocket serverSocket=new ServerSocket(8888);
        //调用accept()监听,等待客户端的连接
        System.out.println("服务器即将启动 ,等待客户端的连接");
        Socket socket=serverSocket.accept();
        //获取输入流,读取客户端信息
        InputStream is=socket.getInputStream();
        InputStreamReader isr=new InputStreamReader(is);//将字节流转为字符流
        BufferedReader br=new BufferedReader(isr);//为输入流添加缓冲
        String info=null;
        while((info=br.readLine())!=null){
            System.out.println("服务器,客户端:"+info);
        }
        socket.shutdownInput();
        
        br.close();
        isr.close();
        is.close();
        socket.close();
        serverSocket.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
}

在客户端,创建Socket对象,指明要连接的服务器地址和端口号;建立连接后,通过输出流想服务器端发送请求信息;通过输入流获取服务器响应的信息;关闭相关资源。

public class Client {
public static void main(String[] args) {
    try {
        //创建客户端Socket,指定服务器地址和端口
        Socket socket=new Socket("localhost",8888);
        //获取输出流,向服务器发送信息
        OutputStream os=socket.getOutputStream();//字节输出流
        PrintWriter pw=new PrintWriter(os);//将输出流包装成打印流
        pw.write("用户名:admin;密码:123"); 
        pw.flush();//刷新缓存,向服务器端提供信息
        socket.shutdownOutput();//关闭输出流
        
        pw.close();
        os.close();
        socket.close();
    } catch (UnknownHostException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
}

服务器响应客户端:

//获取输入流,响应客户端的请求
OutputStream os=socket.getOutputStream();
PrintWriter pw=new PrintWriter(os);//包装为打印流
pw.write("欢迎您");
pw.flush();//调用flush方法将缓冲输出
pw.close();
os.close();

客户端:

//获取输入流,读取服务器端的响应信息
InputStream is=socket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String info=null;
while((info=br.readLine())!=null){
    System.out.println("客户端,服务器:"+info);
}
br.close();
is.close();

使用多线程实现多客户端的通信:

技术分享

ServerTherad类

public class ServerThread extends Thread{
    Socket socket=null;
    public ServerThread(Socket socket){
        this.socket=socket;//初始化和本线程相关的socket
    }
    //线程执行的操作,响应客户端的请求
    public void run(){
        //获取输入流,读取客户端信息
        InputStream is=null;
        InputStreamReader isr=null;
        BufferedReader br=null;
        //获取输入流,响应客户端的请求
        OutputStream os=null;
        PrintWriter pw=null;
        try {
            is = socket.getInputStream();
            isr = new InputStreamReader(is);
            br = new BufferedReader(isr);
            String info=null;
            while((info=br.readLine())!=null){
                System.out.println("服务器,客户端:"+info);
            }
            socket.shutdownInput();
            os = socket.getOutputStream();
            pw = new PrintWriter(os);
            pw.write("欢迎您");
            pw.flush();//调用flush方法将缓冲输出
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            try {
                if(pw!=null)
                    pw.close();
                if(os!=null)
                    os.close();
                if(br!=null)
                    br.close();
                if(isr!=null)
                    isr.close();
                if(is!=null)
                    is.close();
                if(socket!=null)
                    socket.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

Server类

public class Server {
public static void main(String[] args) {
    try {
        ServerSocket serverSocket=new ServerSocket(8888);
        Socket socket=null;
        //记录客户端的数量
        int count=0;
        System.out.println("服务器即将启动 ,等待客户端的连接");
        //循环监听等待客户端的连接
        while(true){
            socket=serverSocket.accept();
            //创建一个线程
            ServerThread serverThread=new ServerThread(socket);
            //启动线程
            serverThread.start();
            
            count++;
            System.out.println("客户端的数量"+count);
            InetAddress address=socket.getInetAddress();
            System.out.print("当前客户端的IP:"+address.getHostAddress());
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}
}

 

mooc_java Socket

原文:http://www.cnblogs.com/mao-19/p/4963569.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!