双向服务器
① 如何实现服务器和用户端的双向认证
天威诚信的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