利用套接字进行网络编程

来源:互联网 发布:网络教育专科学历 编辑:程序博客网 时间:2024/05/19 01:29

创建两个java类,Server.java和Client.java。
Client.java代码:

package main;import java.io.*;import java.net.*;public class Client {    public static void main(String[] args) {        // TODO code application logic here        try{            Socket connectToServer=new Socket("localhost",5500);//连接到本机,端口号5500            DataInputStream inFromServer=new DataInputStream(                                    connectToServer.getInputStream());//将数据输入流连接到socket上            DataOutputStream outToServer=new DataOutputStream(                                    connectToServer.getOutputStream());//将数据输出流连接到socket上            System.out.println("输入半径数值发送到服务器,输入bye结束。");            String outStr,inStr;            boolean goon=true;            BufferedReader buf=new BufferedReader(                                    new InputStreamReader(System.in));//将用户输入的数据保存在buf中            while(goon){                outStr=buf.readLine();//读入用户的输入                outToServer.writeUTF(outStr);//写到已经连接socket的数据输出流中                outToServer.flush();//flush()表示强制将缓冲区中的数据发送出去,不必等到缓冲区满.                inStr=inFromServer.readUTF();//从已经连接socket的数据输入流中读数据(就是说读服务器返回的数据)                if(!inStr.equals("bye"))//如果返回的不是bye,就输出返回的数据                    System.out.println("从服务器返回的结果是"+inStr);                else                           //否则结束客户端的输入                    goon=false;            }            inFromServer.close();   //关闭输入流            outToServer.close();     //关闭输出流            connectToServer.close();//关闭socket        }catch(IOException e){            e.printStackTrace();        }    }}

Server.java代码:

package main;import java.io.*;import java.net.*;public class Server {    public static void main(String[] args){        try{            System.out.println("等待连接");            ServerSocket serverSocket=new ServerSocket(5500);//服务端创建监听端口的ServerSocket            Socket connectToClient=serverSocket.accept();           //ServerSocket对象调用accept()方法在指定的端口监听到来的连接。accept()一直处于阻塞状态,直到有客户端试图建        //立连接。这时accept()方法返回连接客户端与服务器的Socket对象            System.out.println("连接请求来自"+                               connectToClient.getInetAddress().getHostAddress());//获得套接字连接的地址            DataInputStream inFromClient=new DataInputStream(                               connectToClient.getInputStream());//获得套接字所用的输入流            DataOutputStream outToClient=new DataOutputStream(                               connectToClient.getOutputStream());//获得套接字所用的输出流            String str;            double radius,area;            boolean goon=true;            while(goon){                str=inFromClient.readUTF();                if(!str.equals("bye")){                    radius=Double.parseDouble(str);//字符串封装为double型                    System.out.println("接收到的半径值为:"+radius);                    area=radius*radius*Math.PI;                    str=Double.toString(area);//double封装为字符串类型                    outToClient.writeUTF(str);                    outToClient.flush();                    System.out.println("圆面积"+str+"已经发送");                }else{                    goon=false;                    outToClient.writeUTF("bye");                    outToClient.flush();                }            }            inFromClient.close();            outToClient.close();            serverSocket.close();        }catch(IOException e){            e.printStackTrace();        }    }}

运行结果:
先运行Server.java,右键运行文件,

再运行Client.java,

可见连接成功。
在客户端输入2,

从服务器返回结果成功。


注:
1、

BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));

上面可以写成:

InputStream input = System.in;  BufferedReader buf = new BufferedReader(new InputStreamReader(input));   

2、

connectToClient.getInetAddress().getHostAddress();

socket.getInetAddress()返回InetAddress对象包含远程计算机的IP地址。InetAddress.getHostAddress()返回String对象与该地址的文本表示。可以写成:

InetAddress addr = socket.getInetAddress();String remoteIp = addr.getHostAddress();

总结
Socket是网络驱动层提供给应用程序的接口和一种机制,能执行7种基本操作:
(1)连接到远程机器
(2)绑定到端口
(3)接收从远程极其来的绑定端口上的连接
(4)监听到达的数据
(5)发送数据
(6)接收数据
(7)关闭连接

0 0
原创粉丝点击