以您熟悉的编程语言为例完成一个hello/hi的简单的网络聊天程序

  Socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。

   java中利用 Socket 编写的通信程序。利用 TCP 协议进行通信的两个应用程序是有主次之分的,一个是服务器程序,一个是客户端程序,两者的功能和编写方法不太一样。其中 ServerSocket 类表示 Socket 服务器端,Socket 类表示 Socket 客户端,两者之间的交互过程如下:

  1. 服务器端创建一个 ServerSocket(服务器端套接字),调用 accept() 方法等待客户端来连接。
  2. 客户端程序创建一个 Socket,请求与服务器建立连接。

服务器接收客户的连接请求,同时创建一个新的 Socket 与客户建立连接,服务器继续等待新的请求。

下面简单介绍下seversocket和socket

ServerSocket 类是与 Socket 类相对应的用于表示通信双方中的服务器端,用于在服务器上开一个端口,被动地等待数据(使用 accept() 方法)并建立连接进行数据交互。

服务器套接字一次可以与一个套接字连接,如果多台客户端同时提出连接请求,服务器套接字会将请求连接的客户端存入队列中,然后从中取出一个套接字与服务器新建的套接字连接起来。


  ServerSocket 的构造方法

  ServerSocket 的构造方法有以下几种

  • ServerSocket():无参构造方法。
  • ServerSocket(int port):创建绑定到特定端口的服务器套接字。
  • ServerSocket(int port,int backlog):使用指定的 backlog 创建服务器套接字并将其绑定到指定的本地端口。
  • ServerSocket(int port,int backlog,InetAddress bindAddr):使用指定的端口、监听 backlog 和要绑定到本地的 IP 地址创建服务器。

   Socket 类表示通信双方中的客户端,用于呼叫远端机器上的一个端口,主动向服务器端发送数据(当连接建立后也能接收数据)。

  Socket 的构造方法

  Socket 的构造方法如下所示。

  • Socket():无参构造方法。
  • Socket(InetAddress address,int port):创建一个流套接字并将其连接到指定 IP 地址的指定端口。
  • Soclcet(InetAddress address,int port,InetAddress localAddr,int localPort):创建一个套接字并将其连接到指定远程地址上的指定远程端口。
  • Socket(String host,int port):创建一个流套接字并将其连接到指定主机上的指定端口。
  • Socket(String host,int port,InetAddress localAddr,int localPort):创建一个套接字并将其连接到指定远程地址上的指定远程端口。Socket 会通过调用 bind() 函数来绑定提供的本地地址及端口。    

     在java类ServerSocket创建时分别调用了linux中socket(),bind(),listen()接口,使服务器处于监听状态。seversocket.accept()方法调用了linux中accept接口,readLine方法调用recv接口,读取客户端传输的数据。

  •  

    java实现hello/hi的简单的网络聊天程序

  • 服务端
  • import java.io.*;
    import java.net.*;
    import java.util.*;
    
    public class Server implements Runnable {
       private Socket socket;
       Server(Socket sock) {
       	this.socket = sock;
       }
       public static void main(String args[])
       		throws Exception {
       	ServerSocket serverSocket = new ServerSocket(8868);
       	while (true) {
       		Socket sock = serverSocket.accept();
       		new Thread(new Server(sock)).start();
       	}
       }
       public void run() {
       	try {          
       	InputStream in = socket.getInputStream();
    
       	byte[] buf = new byte[1024];
          while(true)
    	{int len = in.read(buf);
    
    	System.out.println(new String(buf,0,len));
    	}
     	   			
       		
       	}
       	catch (IOException e) {
       		System.out.println(e);
       	}finally {
       		try {
       			socket.close();
       		} catch (IOException e) {
       			e.printStackTrace();
       		}
       	}
       }
    }
    

      客户端

    import java.io.*;
    import java.net.*;
    import java.util.*;
    public class client{
    
        public static void main(String[] args)throws Exception {
    
        Socket s = new Socket("127.0.0.1",8868);
    
        Scanner cout=new Scanner(System.in);
    
        OutputStream out = s.getOutputStream();
        while(true){
     	String put=cout.next();
    	out.write(put.getBytes());	
            }
        }
    }    
    

      运行效果

  • 作者:SA19225179

    参考资料来源:https://blog.csdn.net/vipshop_fin_dev/article/details/102966081

猜你喜欢

转载自www.cnblogs.com/shizijuzi/p/11991823.html
今日推荐