Java Socket

来源:互联网 发布:动态最优化基础 pdf 编辑:程序博客网 时间:2024/05/29 14:14

TCP通信

通过ServerSocket指定端口号,Socket访问本机,控制台简单的输出交互。
服务端

ServerSocket ss = new ServerSocket(port);Socket s = ss.accept();

客户端

Socket s = new Socket(loaclhost,port);

下面贴出一个简单的交互实例:

package com.hz.speak;import java.io.BufferedReader;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;import java.net.SocketException;public class TestServer {    public static void main(String[] args) {        new TestServer().TestServerSocket();    }    public void TestServerSocket() {        DataOutputStream dos = null;        DataInputStream dis = null;        ServerSocket ss = null;        Socket socket = null;        try {            ss = new ServerSocket(10000);            socket = ss.accept();//阻塞            OutputStream os = socket.getOutputStream();            dos = new DataOutputStream(os);            InputStream is = socket.getInputStream();            dis = new DataInputStream(is);            InputStreamReader isr = new InputStreamReader(System.in);            BufferedReader br = new BufferedReader(isr);            String info;            while(true){                info = dis.readUTF();                System.out.println("对方说:" + info);                if(info.equals("bye")){                    break;                }                info = br.readLine();                dos.writeUTF(info);                if(info.equals("bye")){                    break;                }            }        } catch (SocketException e) {            System.out.println("网络连接异常,程序退出!");        }catch (IOException e) {            e.printStackTrace();        }finally{            try {                if(dos != null){                    dos.close();                }                if(dis != null){                    dis.close();                }                if(socket != null){                    socket.close();                }                if(ss != null){                    ss.close();                }            } catch (IOException e) {                e.printStackTrace();            }        }    }}
package com.hz.speak;import java.io.BufferedReader;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.Socket;import java.net.UnknownHostException;public class TestClient {    public static void main(String[] args) {        new TestClient().TestSocket();    }    public void TestSocket() {        DataInputStream dis = null;        DataOutputStream dos = null;        Socket socket = null;        try {            socket = new Socket("127.0.0.1", 10000);            InputStream is = socket.getInputStream();            dis = new DataInputStream(is);            OutputStream os = socket.getOutputStream();            dos = new DataOutputStream(os);            InputStreamReader isr = new InputStreamReader(System.in);            BufferedReader br = new BufferedReader(isr);            String info;            while(true){                info = br.readLine();                dos.writeUTF(info);                if(info.equals("bye")){                    break;                }                info = dis.readUTF();                System.out.println("对方说:" + info);                if(info.equals("bye")){                    break;                }            }        } catch (UnknownHostException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }finally{            try {                if(dis != null){                    dis.close();                }                if(dos != null){                    dos.close();                }                if(socket != null){                    socket.close();                }            } catch (IOException e) {                e.printStackTrace();            }        }    }}

TCP简单的文件上传功能:

package com.hz.test;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;public class FileUploading {    public static void main(String[] args) {        try {            ServerSocket serverSocket = new ServerSocket(10001);            while(true){                //调用accept()方法接收客户端请求,得到Socket对象                Socket socket = serverSocket.accept();                //每当和客户端建立连接后,单独开启一个线程处理和客户端的交互                new Thread(new ServerThread(socket)).start();             }        } catch (IOException e) {            e.printStackTrace();        }    }}    class ServerThread implements Runnable{        private Socket socket;        public ServerThread(Socket socket) {            super();            this.socket = socket;        }        @Override        public void run() {            String ip = socket.getInetAddress().getHostAddress();//获取客户端的地址            int count = 1;            try {                InputStream in = socket.getInputStream();                File parentFile = new File("d:\\upload\\");//创建上传图片目录的File对象                if(!parentFile.exists()){//如果不存在,就创建这个目录                    parentFile.mkdir();                }                //把客户端的IP地址作为上传的文件名                File file = new File(parentFile,ip+"("+count+").jpg");                while(file.exists()){                    //如果文件名存在,则把count++                    file = new File(parentFile,ip+"("+(count++)+").jpg");                }                //创建                FileOutputStream fos = new FileOutputStream(file);                byte[] buff = new byte[1024];                int len = 0;                while((len = in.read(buff)) != -1){                    fos.write(buff, 0, len);                }                OutputStream out = socket.getOutputStream();//获取服务器的输出流                out.write("上传成功".getBytes());                fos.close();                socket.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }
package com.hz.test;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;import java.net.UnknownHostException;public class FileClient {    public static void main(String[] args) {        try {            Socket socket = new Socket("127.0.0.1", 10001);            OutputStream out = socket.getOutputStream();            //创建FileInputStream对象            FileInputStream fis = new FileInputStream("E:\\20160928JavaBase\\Test\\gg\\999.jpg");            byte[] buff = new byte[1024];            int len = 0;            while((len = fis.read(buff))!= -1){                out.write(buff, 0, len);            }            socket.shutdownOutput();//关闭客户端输出流            InputStream in = socket.getInputStream();            byte[] buffMsg = new byte[1024];            int num = in.read(buffMsg);//接收服务端的消息            String Msg = new String(buffMsg, 0, num);            System.out.println(Msg);            fis.close();            socket.close();        } catch (UnknownHostException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }}

如果实现界面的通信,可以参考我前面的ServerSocket+Swing+SQL Server2008聊天系统(好友私聊,聊天室群聊)此博客更加完善的讲述了带界面,类似QQ的服务端和客户端的交互!http://blog.csdn.net/qq_33624284/article/details/53581174

0 0
原创粉丝点击