zoukankan      html  css  js  c++  java
  • 简单的SocketExample

    客户端
    //
    ---------------VerySimpleClient.java package SocketExample; // Tue Nov 2 18:34:53 EST 2004 // // Written by Sean R. Owens, sean at guild dot net, released to the // public domain. Share and enjoy. Since some people argue that it is // impossible to release software to the public domain, you are also free // to use this code under any version of the GPL, LPGL, or BSD licenses, // or contact me for use of another license. // http://darksleep.com/player import java.net.Socket; import java.net.ServerSocket; import java.io.InputStream; import java.io.OutputStream; import java.io.IOException; public class VerySimpleClient { private String serverHostname = null; private int serverPort = 0; private byte[] data = null; private Socket sock = null; private InputStream sockInput = null; private OutputStream sockOutput = null; public VerySimpleClient(String serverHostname, int serverPort, byte[] data){ this.serverHostname = serverHostname; this.serverPort = serverPort; this.data = data; } public void sendSomeMessages(int iterations) { System.err.println("Opening connection to "+serverHostname+" port "+serverPort); try { sock = new Socket(serverHostname, serverPort); sockInput = sock.getInputStream(); sockOutput = sock.getOutputStream(); } catch (IOException e){ e.printStackTrace(System.err); return; } System.err.println("About to start reading/writing to/from socket."); byte[] buf = new byte[data.length]; int bytes_read = 0; for(int loopi = 1; loopi <= iterations; loopi++) { try { sockOutput.write(data, 0, data.length); bytes_read = sockInput.read(buf, 0, buf.length); } catch (IOException e){ e.printStackTrace(System.err); } if(bytes_read < data.length) { System.err.println("run: Sent "+data.length+" bytes, server should have sent them back, read "+bytes_read+" bytes, not the same number of bytes."); } else { System.err.println("Sent "+bytes_read+" bytes to server and received them back again, msg = "+(new String(data))); } // Sleep for a bit so the action doesn't happen to fast - this is purely for reasons of demonstration, and not required technically. try { Thread.sleep(50);} catch (Exception e) {}; } System.err.println("Done reading/writing to/from socket, closing socket."); try { sock.close(); } catch (IOException e){ System.err.println("Exception closing socket."); e.printStackTrace(System.err); } System.err.println("Exiting."); } public static void main(String argv[]) { String hostname = "localhost"; int port = 54321; byte[] data = "Hello World".getBytes(); VerySimpleClient client = new VerySimpleClient(hostname, port, data); client.sendSomeMessages(100); } }
    服务端:
    //-------------VerySimpleServer.java     
    package SocketExample;
    
    // Tue Nov  2 18:33:43 EST 2004
    //
    // Written by Sean R. Owens, sean at guild dot net, released to the
    // public domain.  Share and enjoy.  Since some people argue that it is
    // impossible to release software to the public domain, you are also free
    // to use this code under any version of the GPL, LPGL, or BSD licenses,
    // or contact me for use of another license.
    // http://darksleep.com/player
    
    import java.net.Socket;
    import java.net.ServerSocket;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.IOException;
    
    // An example of a very simple socket server.  Start by looking at the
    // static main() method at the bottom of this file.
    public class VerySimpleServer {
        private int serverPort = 0;
        private ServerSocket serverSock = null;
    
        public VerySimpleServer(int serverPort) {
            this.serverPort = serverPort;
    
            try {
                serverSock = new ServerSocket(serverPort);
            }
            catch (IOException e){
                e.printStackTrace(System.err);
            }
        }
        
        // All this method does is wait for some bytes from the
        // connection, read them, then write them back again, until the
        // socket is closed from the other side.
        public void handleConnection(InputStream sockInput, OutputStream sockOutput) {
            while(true) {
                byte[] buf=new byte[1024];
                int bytes_read = 0;
                try {
                    // This call to read() will wait forever, until the
                    // program on the other side either sends some data,
                    // or closes the socket.
                    bytes_read = sockInput.read(buf, 0, buf.length);
    
                    // If the socket is closed, sockInput.read() will return -1.
                    if(bytes_read < 0) {
                        System.err.println("Tried to read from socket, read() returned < 0,  Closing socket.");
                        return;
                    }
                    System.err.println("Received "+bytes_read
                                       +" bytes, sending them back to client, data="
                                       +(new String(buf, 0, bytes_read)));
                    sockOutput.write(buf, 0, bytes_read);
                    // This call to flush() is optional - we're saying go
                    // ahead and send the data now instead of buffering
                    // it.
                    sockOutput.flush();
                }
                catch (Exception e){
                    System.err.println("Exception reading from/writing to socket, e="+e);
                    e.printStackTrace(System.err);
                    return;
                }
            }
    
        }
    
        public void waitForConnections() {
            Socket sock = null;
            InputStream sockInput = null;
            OutputStream sockOutput = null;
            while (true) {
                try {
                    // This method call, accept(), blocks and waits
                    // (forever if necessary) until some other program
                    // opens a socket connection to our server.  When some
                    // other program opens a connection to our server,
                    // accept() creates a new socket to represent that
                    // connection and returns.
                    sock = serverSock.accept();
                    System.err.println("Have accepted new socket.");
    
                    // From this point on, no new socket connections can
                    // be made to our server until we call accept() again.
    
                    sockInput = sock.getInputStream();
                    sockOutput = sock.getOutputStream();
                }
                catch (IOException e){
                    e.printStackTrace(System.err);
                }
    
                // Do something with the socket - read bytes from the
                // socket and write them back to the socket until the
                // other side closes the connection.
                handleConnection(sockInput, sockOutput);
    
                // Now we close the socket.
                try {
                    System.err.println("Closing socket.");
                    sock.close();
                }
                catch (Exception e){
                    System.err.println("Exception while closing socket.");
                    e.printStackTrace(System.err);
                }
    
                System.err.println("Finished with socket, waiting for next connection.");
            }
        }
    
        public static void main(String argv[]) {
            int port = 54321;
            VerySimpleServer server = new VerySimpleServer(port);
            server.waitForConnections();
        }
    }
  • 相关阅读:
    使用策略模式减少if else
    php 向二维数组中追加元素
    svn update 产生Node remains in conflict的问题
    php对ip地址的处理
    php 对比两个数组中的值是否相等
    jquery 通过attr获取属性只有一个值的解决
    php 一维数组去重
    调整ceph的pg数(pg_num, pgp_num)
    linux-Centos 7下bond与vlan技术的结合[推荐]
    centos 配置vlan
  • 原文地址:https://www.cnblogs.com/JavaTechLover/p/3319232.html
Copyright © 2011-2022 走看看