A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sixth 中级黑马   /  2012-11-6 14:56  /  1261 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在网络编程中,Socket是一种非常通用的方式。所谓socket通常被翻译成"套接字"。很晦涩。其实按我的理解所谓socket就是指两者之间通信的一个管道。
     好比刚见面的两个人,一个人伸出手去,等待和你握手。这时候,先伸手的人就是服务器。后伸手的人就是客户端,但是一旦两人握上了手,那么都可以摇手表示你好你好啊。
  又好比一部等待呼入的电话A。就可以看成一个服务器。来等待其它人的呼入。一旦你用话机拨打了A的号码。那么你的话机B就是客户端,A就是服务器啦。那么你们就通过电话线建立了一个通信的Socket了。
Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。
首先建立一个服务器端代码如下:
//服务器
public class Server0312 {
    Socket socket=null; //套接字
    InputStream is =null;//输入流
    OutputStream os =null;//输出流
    BufferedReader br =null;
    public Server0312(){
        try {
            ServerSocket server =new ServerSocket(5005);
            socket=    server.accept();
            System.out.println("服务已连接---");
            is =socket.getInputStream();
            os=socket.getOutputStream();
            br=new BufferedReader(new InputStreamReader(is));
            os.write("welcome".getBytes());//发送给客户端
            os.flush();
            String said=br.readLine();//可以一次读取一行,读取客户端发来的消息
            System.out.println("client said:"+said);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            try {
                br.close();
                is.close();
                os.close();
                socket.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args) {
        new Server0312();
    }
}
然后建立一个客户端代码:
public class Client0312 {
    Socket socket=null; //套接字
    InputStream is =null;//输入流
    OutputStream os =null;//输出流
    BufferedWriter bw=null;
    public Client0312(){
        try {
            socket=new Socket("127.0.0.1",5005);//指定连接地址和端口
            is =socket.getInputStream();
            os=socket.getOutputStream();
            bw=new BufferedWriter(new OutputStreamWriter(os));
            byte[] b =new byte[1024];
            int len=is.read(b);
            String s =new String(b,0,len);
            System.out.println("服务器说:"+s);
            bw.write("hello");
            bw.flush();
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            try {
                bw.close();
                is.close();
                os.close();
                socket.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args) {
        new Client0312();
    }
}
程序首先运行服务端,然后运行CLient程序,服务器首先说Welcome.客户端收到后说hello.
这是一个非常简单的c/s通讯模型。
如果服务器要一直运行并监听的话。服务器必须开启线程了。以下为SLideshare的ppt

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

1 个回复

倒序浏览
学习了 。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马