1. 程式人生 > >socket通訊顯示連線被拒絕問題總結

socket通訊顯示連線被拒絕問題總結

socket通訊方式

        通常使用的是socket通訊模式為c/s模式,就是通過服務端建立連線,並繫結監聽相關的埠,客戶端通過連線至相應的埠,實現使用tcp的三次握手來進行可靠性連線,從而達到資料傳輸。如果對應的客戶端和服務端在同一臺伺服器上,因是資料內部通訊方式,可直接相連線。但是當我們的客戶端和服務端分別部署在不同的伺服器上,有時候會出現客戶端連線的時候提示connect refuse,連線拒絕,的問題。這種情況是因為防火牆開啟(*前提是服務端程式正常啟動,並正常監聽對應的埠*),說明服務端監聽的埠沒有放行到知道,解決方法,而通過關閉防火牆,但是這並不是一種好的方法,因為畢竟防火牆為了保護伺服器免予收到外部連結的攻擊,從而導致服務癱瘓。為了解決該方法,可以將我們需要監聽的埠配置在防火牆配置表裡,讓其放行服務監聽的埠,這樣客戶端就能正常的連線至服務端,並開始的資料的傳送接收處理。

如何將監聽的埠配置防火牆配置表中,讓其放行埠,如下所示:

(1)可以在/etc/sysconfig/iptables檔案中配置將需要放行的埠進行配置,之後重啟防火牆,這樣該埠每次接收連線請求的時候就會進行放行,就不會攔截,導致連線被拒絕的問題。如圖所示:

如上如所示,預設的放行的埠為22,可以將自己使用的埠新增至該檔案中,之後重啟防火牆命令:service iptables restart.

(2)直接通過命令列累新增

檢視防火牆規則及編號:

iptables -nL --line-number

新增埠命令:

iptables -A INPUT -p tcp  -m state  --state  NEW  -m tcp --dport  埠號 -j  ACCEPT

儲存執行的命令:

service iptalbes save

順帶介紹其他的幾個引數的含義:

      –A 引數就看成是新增一條規則

      –p 指定是什麼協議,我們常用的tcp 協議,當然也有udp,例如53埠的DNS

      –dport 就是目標埠,當資料從外部進入伺服器為目標埠

      –sport 資料從伺服器出去,則為資料來源埠使用 

       –j 就是指定是 ACCEPT -接收 或者 DROP 不接收

       -s 禁止某個IP的訪問:

      例如: iptables  -A INPUT  -p  tcp  -s 192.168.1.1 -j DROP  表示禁止該IP訪問該服務

       -D 刪除某個規則

      例如: iptables -D INPUT 2  表示刪除編號為2的規則