基于TCP/IP的网络编程

来源:互联网 发布:网络小贷公司设立条件 编辑:程序博客网 时间:2024/05/20 08:23


 

TCP/IP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket,从而在通信的两端之间形成网络虚拟链路。一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信。

Socket,也在套接字。通常用来实现Client-Server的连接。

 

它的开发原理:

服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。

客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。

 

在客户端如何建立Socket连接?

要连接到其他的机器上,我们会需要Socket的连接。Socket是个代表两台机器之间网络连接的对象。要创建Socket连接要知道两项关于服务器的信息:它在哪里以及用哪个端口来收发数据。也就是说IP地址与端口。

Socket chatSocket = new Socket(“192.168.1.10”,3000);

以上参数分别是IP地址和TCP端口(端口应介于1024~65535之间的数字)。

Socket连接的建立代表两台机器之间存有对方的信息,包括网络地址和TCP端口。

它们彼此知道对方,才能够找到对方进行通信。

在服务端如何建立Socket连接?

服务器应用程序对特定端口创建出ServerSocket,让服务器开始监听来自3000端口的客户请求

ServerSocket server_socket = new ServerSocket(3000);

服务器创建出与客户端通信的新Socket

Socket socket = server_socket.accept();

 

 

客户端代码示例(T1_Client.java)

importjava.net.*;

importjava.io.*;

publicclass T1_Client{

       public static void main ( String[] args )throws Exception

       {

              //1、客户端对服务器应用程序建立Socket连接

              Socket socket = new Socket("127.0.0.1",5000);

              //2、键盘输入流

              BufferedReader input = newBufferedReader ( new InputStreamReader ( System.in ) );

              //3、从socket对象中获取数据输出对象

              PrintWriter output = newPrintWriter ( socket.getOutputStream(),true );

 

              //4、不断获取用户输入,并发送给服务端

              while(true){

                     String lineToBeSent =input.readLine();

                     //如果用户输入".",终止循环

                     if ( lineToBeSent.equals ("." ) ) break;

                     output.println (lineToBeSent );

              }

              //5、结束通讯

              socket.close();

       }

}

 

服务端代码示例(T1_Server.java)

importjava.net.*;

importjava.io.*;

public classT1_Server{

       public static void main ( String[] args)throws Exception

       {

              //1、服务器应用程序对特定端口创建出ServerSocket,让服务器开始监听来自5000端口的客户请求

              ServerSocket server_socket = newServerSocket(5000);

              //2、服务器等待客户端的连接

              while(true){

                     //服务器创建出与客户端通信的新Socket

                     Socket socket =server_socket.accept();

                    

                     BufferedReader input = newBufferedReader ( new InputStreamReader ( socket.getInputStream() ) );

                     while(true){

                            String message =input.readLine();

                            if ( message==null )break;

                            System.out.println (message );

                     }

                     socket.close();

                     System.out.println ("Connection closed by client" );                     

              }

              //accept()方法会在等待用户的Socket连接时闲置着。当一个用户连上来时,此方法会返回一个Socket(在不同的端口上)以便与客户端通信。由于客户端中断连接,才去继续accept()等待下一个客户端进入,因此,无法同时处理多个客户端的连接!!

       }

}

 

1 0