程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> JavaSE——TCP協議網絡編程(一),javase網絡編程

JavaSE——TCP協議網絡編程(一),javase網絡編程

編輯:JAVA綜合教程

JavaSE——TCP協議網絡編程(一),javase網絡編程


實現客戶端與服務端的連接: 

  • 使用ServerSocket創建TCP服務端

  ServerSocket :此類實現服務器套接字。服務器套接字請求通過網絡傳入,基於該請求執行某些操作,然後可能向請求者返回結果。

  詳細描述見:http://download.java.net/jdk/jdk-api-localizations/jdk-api-zh-cn/publish/1.6.0/html/zh_CN/api/index.html

  ServerSocket 類的構造方法:

ServerSocket()
          創建非綁定服務器套接字。 ServerSocket(int port)
          創建綁定到特定端口的服務器套接字。 ServerSocket(int port, int backlog)
          利用指定的 backlog 創建服務器套接字並將其綁定到指定的本地端口號。 ServerSocket(int port, int backlog, InetAddress bindAddr)
          使用指定的端口、偵聽 backlog 和要綁定到的本地 IP 地址創建服務器。

  ServerSocket 類的常用方法

 Socket accept()
          偵聽並接受到此套接字的連接。  void bind(SocketAddress endpoint, int backlog)
          將 ServerSocket 綁定到特定地址(IP 地址和端口號)。  void close()
          關閉此套接字。  InetAddress getInetAddress()
          返回此服務器套接字的本地地址。  boolean isBound()
          返回 ServerSocket 的綁定狀態。  boolean isClosed()
          返回 ServerSocket 的關閉狀態。

簡要代碼:

ServerSocket server = new ServerSocket( 有效端口號 );

Server client = server.accept(); // 在沒有接收到客戶端連接請求時, accept 屬於堵塞狀態,接收到後繼續                                                        //運行。

if(client!=null){

  System.out.println("有客戶端連接上來了");

}

 

  • 使用Socket創建TCP客戶端

  Socket 類:此類實現客戶端套接字(“套接字”).套接字是兩台機器間通信的端點。

  常用的構造方法:

  Socket()
          通過系統默認類型的 SocketImpl 創建未連接套接字   Socket(InetAddress address, int port)
          創建一個流套接字並將其連接到指定 IP 地址的指定端口號。   Socket(InetAddress address, int port, InetAddress localAddr, int localPort)
          創建一個套接字並將其連接到指定遠程地址上的指定遠程端口。 protected Socket(SocketImpl impl)
          使用用戶指定的 SocketImpl 創建一個未連接 Socket。   Socket(String host, int port)
          創建一個流套接字並將其連接到指定主機上的指定端口號。   Socket(String host, int port, InetAddress localAddr, int localPort)
          創建一個套接字並將其連接到指定遠程主機上的指定遠程端口。

 

常用的方法:

 void bind(SocketAddress bindpoint)
          將套接字綁定到本地地址。  void close()
          關閉此套接字。  void connect(SocketAddress endpoint)
          將此套接字連接到服務器。

 簡要代碼:

Socket client = new Socket("127.0.0.0",9999);  服務端IP地址與端口號。

  查詢計算機的ip地址和端口號:

  打開命令提示符,輸入:
  ipconfig/all   (windows ip configuration 視窗操作系統ip配置)查看當前IP及電腦網絡配置; 顯示當前電腦ip相關所有信息,包括ip地址、網卡(mac)地址。
  netstat -an ,查看當前所有連接端口; netstat(在內核中訪問網絡及相關信息的程序)顯示網絡連接、路由表和網絡接口信息,可以讓用戶得知目前都有哪些網絡連接正在運作。

package 網絡編程;

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

public class Server{
    public static void main(String[] args) {
        try {
            
            ServerSocket server = new ServerSocket(9657);
            Socket client = server.accept();
            if(client!=null){
                System.out.println("有客戶端連接上來了");
                server.close();
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
package 網絡編程;

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

public class Client {


    public static void main(String[] args) {
    
            
                try {
                    Socket client = new Socket("127.0.0.1",9657);
                    client.close();
                } catch (UnknownHostException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
    }

}

output:有客戶端連接上來了。

此段服務端代碼存在問題,客戶端與服務端建立連接之後服務會自動關閉,不能繼續接受多個客戶端的請求。可以加上一個 while 循環,使服務端接受一個客戶端的請求後又回到 accept() 的接受狀態。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved