zoukankan      html  css  js  c++  java
  • java 网络编程 TCP协议 java 服务器和客户端 java socket编程

    一个 HelloWord 级别的 Java Socket 通信的例子。通讯过程:
            先启动 Server 端,进入一个死循环以便一直监听某端口是否有连接请求。然后运行 Client 端,客户端发出连接请求,服务端监听到这次请求后向客户端发回接受消息,连接建立,启动一个线程去处理这次请求,然后继续死循环监听其他请求。客户端输入字符串后按回车键,向服务器发送数据。服务器读取数据后回复客户端数据。这次请求处理完毕,启动的线程消亡。如果客户端接收到 "OK" 之外的返回数据,会再次发送连接请求并发送数据,服务器会为这次连接再次启动一个线程来进行响应。。。直到当客户端接收到的返回数据为 "OK" 时,客户端退出。

      Java中重点之一就是服务器与客户端的连接,因为是在同一台PC上,所以就设置服务器的地址为“localhost”,注意,我当时试着设置其他名称,但都不行,这个原因还请老司机告一下。另外还要注意,服务端先于客户端运行,废话不多说,上代码了:

    客户端:

    按 Ctrl+C 复制代码

    package WebProgramingDemo;

    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.Socket;
    import java.net.UnknownHostException;

    public class SocketDemo {

    /**
    * @param args
    * @throws IOException
    * @throws UnknownHostException
    */
    public static void main(String[] args) throws IOException {

    Socket s=new Socket("192.168.2.103",10002);
    OutputStream out=s.getOutputStream();
    out.write("Java".getBytes());
    InputStream is=s.getInputStream();
    byte buf[]=new byte[1024];
    int len=is.read(buf);
    System.out.println(new String(buf,0,len));
    s.close();
    }

    }
    按 Ctrl+C 复制代码
    服务端:

    按 Ctrl+C 复制代码

    package WebProgramingDemo;

    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;

    public class ServerSocketDemo {

    /**
    * @param args
    * @throws IOException
    */
    public static void main(String[] args) throws IOException {

    ServerSocket ss = new ServerSocket(10002);
    Socket s = ss.accept();
    String ip = s.getInetAddress().getHostAddress();
    System.out.println(ip + "....connected....");
    InputStream in = s.getInputStream();
    int len = 0;
    byte[] buf = new byte[1024];
    len = in.read(buf);
    System.out.println(new String(buf, 0, len));
    OutputStream os=s.getOutputStream();
    os.write("收到".getBytes());
    os.close();
    s.close();
    ss.close();
    }

    }
    按 Ctrl+C 复制代码

    http://www.cnblogs.com/ysw-go/p/5323357.html

    服务器修改后的代码:

    package test;

    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.Scanner;

    public class ServerSocketDemo {

    /**
    * @param args
    * @throws IOException
    */
    public static void main(String[] args) throws IOException {

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

    while(true)
    {

    String ip = s.getInetAddress().getHostAddress();
    // System.out.println(ip + "....connected....");
    InputStream in = s.getInputStream();
    int len = 0;
    byte[] buf = new byte[1024];
    len = in.read(buf);
    System.out.println(new String(buf, 0, len));
    OutputStream os=s.getOutputStream();
    Scanner scan=new Scanner(System.in);
    String s1=scan.next();
    os.write(s1.getBytes());
    // os.write("收到".getBytes());

    // os.close();
    // s.close();
    // ss.close();
    }


    }

    }

    客户端代码修改后:

    package test2;

    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.Socket;
    import java.net.UnknownHostException;
    import java.util.Scanner;

    public class SocketDemo {

    /**
    * @param args
    * @throws IOException
    * @throws UnknownHostException
    */
    public static void main(String[] args) throws IOException {


    Socket s=new Socket("localhost",10002);
    while(true)
    {

    OutputStream out=s.getOutputStream();
    Scanner scan=new Scanner(System.in);
    String s1=scan.next();
    out.write(s1.getBytes());
    //out.write(s1.getBytes());
    InputStream is=s.getInputStream();
    byte buf[]=new byte[1024];
    int len=is.read(buf);
    System.out.println(new String(buf,0,len));
    // s.close();
    }
    }

    }

    服务器先开启,然后开启客户端,然后客户必须先发消息用套子链接服务器,然后服务器才发消息回馈客户端。一次通信结束。客户端的输出对应服务器的输入,服务器的输出对应客户端的输入。

  • 相关阅读:
    音频可视化
    accunulate
    node
    js 中编码(encode)和解码(decode)的三种方法
    ES6高阶 同步和异步 回调地狱 promise async和await
    区间dp
    树形dp1
    背包dp(多重)
    树形dp
    背包dp(完全)
  • 原文地址:https://www.cnblogs.com/tianzijiaozi/p/7342778.html
Copyright © 2011-2022 走看看