雙向伺服器
① 如何實現服務器和用戶端的雙向認證
天威誠信的TA(Trust Access)可以實現伺服器和用戶端的雙向認證,原理如下
在網站伺服器版端,通過部署權伺服器證書,使用戶在登錄網站的時候可以通過明顯的瀏覽器地址欄右側的顯示框看到網站域名被驗證通過的信息,並且可以通過點擊驗證網站的真實信息;同時利用伺服器證書的密碼機制將網站伺服器與訪問者瀏覽器之間傳輸的信息進行全程加密。
在訪問者用戶端,將捆綁了用戶信息的數字證書存儲於高度安全的天威盾中,在用戶訪問應用伺服器時,服務端要求用戶端出示身份證書,並驗證用戶真實身份,確認是經過授權的用戶後才允許訪問網站敏感信息。
追求高強度信息安全的用戶,如提供信息檢索、網路購物、電子支付、網路社區、網路游戲、網路視頻等的網路服務提供商,均可以通過使用TA(Trust Access)在伺服器端部署伺服器證書,在用戶端使用個人證書來完成受訪網站及訪問者之間的雙向認證,保證訪問鏈接行為是經過雙方授權的,最大程度的保護傳輸數據的安全和用戶隱私信息的安全,有效避免假冒網站及虛假用戶的冒充及騙取行為。
② 美國伺服器雲主機VPS 雙向CN2線路伺服器租用是什麼意思
這個我跟你科普一下,cn2線程是中國與國際互聯的一個專屬線路因為這條線路費回用比較答貴,用的人比較少,所以它比普通的線路速度要快很多。還有一種叫cn2 gla的線路比cn2要更快。這點尤其在網路使用高峰時期體現的尤為明顯
速度對比 : 普通線路<cn2<cn2 gla
③ 怎麼做雙向nat呢
TP伺服器和PC均在USG5300統一安全網關的Trust安全區域,FTP伺服器的IP地址為10.1.1.2,PC機的IP地址為10.1.1.5,二者通過交換機與統一安全網關相連。需求如下:
FTP伺服器對外公布的地址為200.1.1.10,對外使用的埠號為21。
當PC訪問FTP伺服器的公網IP地址時,PC機的地址也進行地址轉換。這樣做的目的是保證PC機和FTP伺服器交互的所有報文能夠經過USG5300,並處理正確。
操作步驟
[USG5300] interface GigabitEthernet 0/0/0
[USG5300-GigabitEthernet0/0/0] ip address 10.1.1.1 24
[USG5300] firewall zone trust
[USG5300-zone-trust] add interface GigabitEthernet 0/0/0
[USG5300] nat server global 200.1.1.10 inside 10.1.1.2
[USG5300] nat address-group 1 200.1.1.20 200.1.1.50
[USG5300] nat-policy zone trust
[USG5300-nat-policy-zone-trust] policy 1
[USG5300-nat-policy-zone-trust-1] policy source 10.1.1.0 0.0.0.255
[USG5300-nat-policy-zone-trust-1] action source-nat
[USG5300-nat-policy-zone-trust-1]address-group 1
[USG5300-nat-policy-zone-trust-1] quit
[USG5300-nat-policy-zone-trust] quit
[USG5300-zone-trust] detect ftp
[USG5300-zone-trust] quit
鏈接地址:http://blog.sina.com.cn/s/blog_406127500102uwh3.html
④ 2 台伺服器之間數據怎麼實時雙向同步
有兩個伺服器,分別裝有兩個SQL Server A ,B
A,B的表結構a,b 相同
A,B分別都會做一些INSERT,UPDATE,DELETE操作,要求回AB的數據保持一致
(即A新增一條答數據,要求B也新增,A更改一條數據,B也更改相應的)
是不是可以用觸發器來實現
那位高手給個常式
/*
作者:鄒建
*/
/*--同步兩個資料庫的示例
有數據
srv1.庫名..author有欄位:id,name,phone,
srv2.庫名..author有欄位:id,name,telphone,adress
要求:
srv1.庫名..author增加記錄則srv1.庫名..author記錄增加
srv1.庫名..author的phone欄位更新,則srv1.庫名..author對應欄位telphone更新
--*/
--大致的處理步驟
--1.在 srv1 上創建連接伺服器,以便在 srv1 中操作 srv2,實現同步
exec sp_addlinkedserver 'srv2','','SQLOLEDB','srv2的sql實例名
⑤ 雙向網路的結構
由伺服器端,中間網路,客戶機端構成。中間網路具有兩條信道,能夠實現伺服器端與客戶機端雙向互動式通行。
⑥ 如何設置雙伺服器
首先需要解決你IP地址抄的問題。如果你是外部要訪問的話,必須將你安裝FTP伺服器的IP地址設為路由器的DMZ主機(如:DMZ主機
在某些特殊情況下,需要讓區域網中的一台計算機完全暴露給廣域網,以實現雙向通信,此時可以把該計算機設置為DMZ主機。
( 注意:設置DMZ主機之後,與該IP相關的防火牆設置將不起作用。)
DMZ主機IP地址: 192.168.1. 啟用
)
然後通過路由器管理工具找到你撥號的時自動生成的IP地址,這時候你的機器就擁有真正的互聯網地址了(
WAN口狀態
MAC 地址: 00-14-78-C0-00-05
IP地址: 59.173.213.134 PPPoE
子網掩碼: 255.0.0.0
網關: 59.173.213.134
DNS 伺服器: 202.103.24.68, 202.103.0.117
)
注意:由於是撥號,你的IP可能會隨著撥號而變化。
然後安裝SERV-U就可以了(在關內容請看下一貼)
以上工作完畢之後可以如此訪問你的FTP: ftp 59.173.213.134(假設這個IP是你PPOE撥號的IP地址)
⑦ 如何實現Linux多台伺服器間的文件雙向同步
Linux自帶了ntp服務 -- /etc/init.d/ntpd,這個服務不僅可以設置讓本機和某台/某些機器做時間同步,他本身還可以扮演一個time server的角色,讓其他機器和他同步時間。
配置文件就是/etc/ntp.conf。
為了測試,設置讓node2 -- 192.168.1.102和node1 -- 192.168.1.101做時間同步。第一步,node1做time server,node1本身不和其他機器時間同步,就是取本地時間。所以,先把node1機器的時間調准了:
[root@node1 ~]date -s 08/03/2011
[root@node1 ~]date -s 11:12:00
[root@node1 ~]clock -w[root@node1 ~]hwclock --systohc
後兩個命令是把設置的時間寫到硬體時間中去(也就是CMOS裡面的時間)。
第二步,然後將node1配置成一個time server,修改/etc/ntp.conf,[root@node1 ~]vi /etc/ntp.conf其他的配置不怎麼需要改,只需要關注restrict的配置:
1. 注釋掉原來的restrict default ignore這一行,這一行本身是不響應任何的ntp更新請求,其實也就是禁用了本機的ntp server的功能,所以需要注釋掉。
⑧ 如何設計客戶端與伺服器雙向通信協議
1.
報文頭:
l
版本號:
10個字元,以Ver開頭,例如:Ver1.0.0.0=Ver1000。
l
報文類型(命令字):
最長不超過20個字元。
l
報文驅動者:
客戶端(當前登錄的帳號),服務端(當前伺服器名)(最長不超過20個字元)。
l
有無參數指示器:
當有參數時,指示器為1,當無參數時,指示器為0。目的是加快解析速度。
l
報文長度:
最長不超過10個字元
l
參數體:
長度可變,但是報文頭+參數體不超過2K位元組,(相當於2048個char型數據,其中連命令字之間的「,「也包括在裡面。)參數與參數之間應用「,」隔開,參數體最大長度為1024個位元組,相當於1K
l
整體報文格式:
版本號,報文類型,報文驅動者,參數指示器,報文長度,Value(參數1,參數2,。。。。。。。)
例如:
ABC伺服器認證請求的報文:
Ver1000,Login,ABC,0,報文長度,Value()
ABC客戶端登錄的報文:
Ver1000,Login,ABC,1,報文長度,Value(賬號,密碼,IP地址)
l
報文結構體:
Struct
Server/CustomMessage
{
char
m_cVersion[10]; //版本號
char m_cCommandType[20]; //報文類型
char m_cDriver[20]; //報文驅動者
char m_cValueSwitch; //參數指示器
char m_cMessageLen[10]; //報文長度
char m_cInputValue[1024]; //參數體
}
2.
具體的報文
定義:->:表示發向那裡。
為了明了,以及方便,直接將參數填入結構體內。
設定伺服器為ABC,客戶端為CDE,Sizeof返回值為字元串。
在「」內表示值為字元串
參數體以Value開頭的字元串。
客戶端的登錄與認證
(命令字與參數)
1、 伺服器->客戶端:要求客戶端把賬號、密碼等信息傳過來。
GetLogin()
struct ServerMessage
{
m_cVersion=「Ver1000」;
m_cCommandType=「GetLogin」;
m_cDriver=「ABC」;
m_cValueSwitch=0;
m_cMessageLen=sizeof(ServerMessage);
m_cInputValue=NULL;
}
2、 伺服器<-客戶端:客戶端上傳賬號、密碼等信息。
Login(賬號,密碼,IP地址)
struct CustomMessage
{
m_cVersion=「Ver1000」;
m_cCommandType=「Login」;
m_cDriver=「CDE」;
m_cValueSwitch=1;
m_cMessageLen=sizeof(CustomMessage);
m_cInputValue=「Value(賬號,密碼,IP地址)」;
}
3、 伺服器->客戶端:錯誤提示,表示賬號錯誤,一般為無此賬號。
AccountError()
struct ServerMessage
{
m_cVersion=「Ver1000」;
m_cCommandType=「AccountError」;
m_cDriver=「ABC」;
m_cValueSwitch=0;
m_cMessageLen=sizeof(ServerMessage);
m_cInputValue=NULL;
}
4、 伺服器->客戶端:錯誤提示,表示賬號對,但密碼不對。
PasswordError()
struct ServerMessage
{
m_cVersion=「Ver1000」;
m_cCommandType=「PasswordError」;
m_cDriver=「ABC」;
m_cValueSwitch=0;
m_cMessageLen=sizeof(ServerMessage);
m_cInputValue=NULL;
}
5、 伺服器->客戶端:錯誤提示,表示帳號被封,請和管理人員聯系。
BlockAccount()
struct ServerMessage
{
m_cVersion=「Ver1000」;
m_cCommandType=「BlockAccount」;
m_cDriver=「ABC」;
m_cValueSwitch=0;
m_cMessageLen=sizeof(ServerMessage);
m_cInputValue=NULL;
}
6、 伺服器->客戶端:錯誤提示,表示已有相同的帳號登陸。
HaveSameAccount()
struct ServerMessage
{
m_cVersion=「Ver1000」;
m_cCommandType=「HaveSameAccount」;
m_cDriver=「ABC」;
m_cValueSwitch=0;
m_cMessageLen=sizeof(ServerMessage);
m_cInputValue=NULL;
}
7、 伺服器<-客戶端:客戶端已顯示錯誤提示,並將自己與伺服器斷開
ErrorMsgReceive()
struct CustomMessage
{
m_cVersion=「Ver1000」;
m_cCommandType=「ErrorMsgReceive」;
m_cDriver=「CDE」;
m_cValueSwitch=0;
m_cMessageLen=sizeof(CustomMessage);
m_cInputValue=NULL;
}
8、 伺服器->客戶端:客戶端已通過伺服器的認證,伺服器向客戶端發送帳號,一次最多40個,估計1K左右。
SendCustomList(客戶端的賬號1,客戶端賬號2,。。。。。。。)
struct ServerMessage
{
m_cVersion=「Ver1000」;
m_cCommandType=「SendCustomList」;
m_cDriver=「ABC」;
m_cValueSwitch=1;
m_cMessageLen=sizeof(ServerMessage);
m_cInputValue=「Value(客戶端的賬號1,客戶端賬號2,。。。。。。。)」;
}
9、 伺服器<-客戶端:表示40個賬號已收到
SendCustomOk()
struct CustomMessage
{
m_cVersion=「Ver1000」;
m_cCommandType=「SendCustomOk」;
m_cDriver=「CDE」;
m_cValueSwitch=0;
m_cMessageLen=sizeof(CustomMessage);
m_cInputValue=NULL;
}
10、
伺服器->客戶端:表示伺服器把當前已接入進的所有客戶賬號發送完畢
SendCustomEnd()
struct ServerMessage
{
m_cVersion=「Ver1000」;
m_cCommandType=「SendCustomEnd」;
m_cDriver=「ABC」;
m_cValueSwitch=0;
m_cMessageLen=sizeof(ServerMessage);
m_cInputValue=NULL;
}
11、
伺服器->客戶端:向當前已連接上的所有的客戶端發送刷新消息,客戶端和伺服器會重復9、10、11的動作。
FlashCustomList()
struct ServerMessage
{
m_cVersion=「Ver1000」;
m_cCommandType=「FlashCustomList」;
m_cDriver=「ABC」;
m_cValueSwitch=0;
m_cMessageLen=sizeof(ServerMessage);
m_cInputValue=「Value(客戶端的賬號1,客戶端賬號2,。。。。。。。)」;
}
12、
伺服器<-客戶端:表示向某個客戶發送消息。
Message(對方客戶端帳號,自己客戶端帳號,客戶信息)
struct CustomMessage
{
m_cVersion=「Ver1000」;
m_cCommandType=「Message」;
m_cDriver=「CDE」;
m_cValueSwitch=1;
m_cMessageLen=sizeof(CustomMessage);
m_cInputValue=「Value(對方客戶端帳號,自己客戶端帳號,客戶信息)」;
}
13、
伺服器->客戶端:轉發某個客戶端的消息給另一個客戶端。
Message(對方客戶端帳號,客戶信息)
struct ServerMessage
{
m_cVersion=「Ver1000」;
m_cCommandType=「Message」;
m_cDriver=「ABC」;
m_cValueSwitch=0;
m_cMessageLen=sizeof(ServerMessage);
m_cInputValue=「Value(對方客戶端帳號,客戶信息)」;
}
⑨ 網路編程中怎麼實現服務端和客戶端雙向通信
使用socket建立tcp連接就可以了
⑩ java中用socket實現客戶端與服務端雙向連接問題
//服務端程序:
importjava.io.*;
importjava.net.*;
publicclassTCPServer{
publicstaticvoidmain(String[]args)throwsIOException{
().init();
}
@SuppressWarnings("static-access")
privatevoidinit()throwsIOException{
@SuppressWarnings("resource")
ServerSocketserver=newServerSocket(1000);
Socketclient=null;
while(true){
try{
client=server.accept();
BufferedInputStreambis=newBufferedInputStream(client.getInputStream());
byte[]b=newbyte[1024];
intlen=0;
Stringmessage="";
while((len=bis.read(b))!=-1){
message=newString(b,0,len);
System.out.print("客戶端:"+client.getInetAddress().getLocalHost().getHostAddress()+"發來消息:"+message);
if("byte".equals(message.trim()))
client.close();
PrintWriterpw=newPrintWriter(client.getOutputStream(),true);
pw.println(message);
}
}catch(Exceptione){
System.err.println("客戶端:"+client.getInetAddress().getLocalHost().getHostAddress()+"已斷開連接!");
}
}
}
}
//客戶端程序:
importjava.io.*;
importjava.net.Socket;
{
publicstaticvoidmain(String[]args)throwsIOException{
newTCPClient().init();
}
privatevoidinit()throwsIOException{
@SuppressWarnings("resource")
finalSocketclient=newSocket("127.0.0.1",1000);
BufferedReaderin=newBufferedReader(newInputStreamReader(System.in));
Stringsend="";
while(true){
send=in.readLine();
PrintWriterout=newPrintWriter(client.getOutputStream(),true);
if(!"byte".equals(send.trim()))
out.println(send);
else{
out.println(send);
System.exit(0);
}
newThread(newTCPClient(){
@SuppressWarnings("static-access")
publicvoidrun(){
try{
BufferedInputStreambis=newBufferedInputStream(client.getInputStream());
byte[]b=newbyte[1024];
intlen=0;
while((len=bis.read(b))!=-1){
System.out.println("伺服器:"+client.getInetAddress().getLocalHost().getHostAddress()+"發來消息:"+newString(b,0,len).trim());
}
}catch(IOExceptione){
System.err.println("連接伺服器失敗!");
}
}
}).start();
}
}
publicvoidrun(){}
}
//伺服器測試結果:
客戶端:192.168.0.200發來消息:001 byte
客戶端:192.168.0.200發來消息:byte
客戶端:192.168.0.200 已斷開連接!
客戶端:192.168.0.200發來消息:adasd
客戶端:192.168.0.200 已斷開連接!
//客戶端測試結果:
---001號客戶端--
001byte
伺服器:192.168.0.200發來消息:001byte
byte //001禮貌說跟伺服器說byte
---002號客戶端--
adasd //002客戶端直接關閉程序
伺服器:192.168.0.200發來消息:adasd