导航:首页 > IDC知识 > 服务器通讯

服务器通讯

发布时间:2020-09-22 20:39:03

1、什么是客户-服务器通信方式?什么是对等通信方式?两者有什么相同点与不同点?

客户-服务器方式是最常用的传统方式,客户是服务请求方,服务器是服务提供方,可同时处理多个远地或本地客户的请求。
对等通信是两台主机在通信时并不区分哪个是服务器请求方还是服务提供方,只要两台主机都运行了对等连接软件,就可以平等的,对等连接通信。
相同的地方就是都能得到想要的服务,只不过前者可能速度较慢。

2、用HTML5做app的话,怎样和服务器进行通讯?

通常webapp与服务器通信都是通过ajax或者直接提交表单来实现的。
1、Java后台服务器打开HTTP所要请求的端口,进行侦听。
2、HTML触发HTTP链接请求,向后台Java服务器发送HTTP请求。
3、Java服务器解析请求,得知所要请求的是什么内容。
4、Java后台服务器将所要请求的内容准备好,并组建成HTTP格式(必须这样,HTML页面才能够解析;直接回复,就无法解析)。
5、Java后台服务器将组建好的HTTP结果消息发送给HTML页面。
6、HTML页面收到HTTP回复。
7、HTML页面对HTTP回复信息解析。
8、HTTP页面对解析的信息进行显示。

3、服务器 通讯端口

使用netstat -an命令即可得到所有连接和侦听端口和以数字格式显示地址和端口号

4、服务器的UDP通讯是什么?

用户数据文报协议 (UDP) 是一个无连接协议。跟 TCP 的操作不同,计算机并不建立连接。另外 UDP 应用程序可以是客户机,也可以是服务器。

为了传输数据,首先要设置客户计算机的 LocalPort 属性。然后,服务器计算机只需将 RemoteHost 设置为客户计算机的 Internet 地址,并将 RemotePort 属性设置为跟客户计算机的 LocalPort 属性相同的端口,并调用 SendData 方法来着手发送信息。于是,客户计算机使用 DataArrival 事件内的 GetData 方法来获取已发送的信息。

5、客户端与服务器通信,有哪些方法?

和虚拟主机的只能通过网页的方式post或者get通讯传输数据
毕竟虚拟主机可以使用的功能有限,asp和php都可以实现你想要的功能
估计你是拿来做验证的吧

6、怎么使用TCP/IP与服务器进行通信

使用流进行网络通信
使用socket进行网络编程的最简单方式是使用NSStream。
NSStream类对流操作进行了抽象,包括对各种流数据的读和写:内存流、网络流或文件流。当然,通过NSStream也可以与服务器进行通信。
无论是通过NSStream向服务器写数据,还是从NStream对象中读取服务器数据,都是一件简单的事情。
在Mac OS X中,使用NSHost和NSStream与服务器进行连接的代码如下:

NSInputStream *iStream;
NSOutputStream *oStream;
uint portNo = 500;
NSURL *website = [NSURLURLWithString:urlStr];
NSHost *host = [NSHost hostWithName:[websitehost]]; [NSStream getStreamsToHost:host
port:portNo
inputStream:&iStream
outputStream:&oStream];
NSStream的getStreamsToHost:port:inputStream:outputStream:方法用于连接服务器并创建一对输入输出流用于向服务器读写数据。问题是iOS中并没有这个方法。因此上述代码无法用于iPhoneapp中。

解决这个问题,需要为NSStream增加新的类别以增加
getStreamToHost:Port:inputstream:outputStream:方法。在Xcode中新建文件
NSStreamAdditions.m。然后在NSStreamAdditions.h中编写代码如下:

@interface NSStream (MyAdditions)
+ (void)getStreamsToHostNamed:(NSString*)hostName
port:(NSInteger)port
inputStream:(NSInputStream **)inputStreamPtr
outputStream:(NSOutputStream **)outputStreamPtr;
@end

在NSStreamAdditions.m文件中加入下列代码。
#import "NSStreamAdditions.h"

@implementation NSStream (MyAdditions)

+ (void)getStreamsToHostNamed:(NSString*)hostName
port:(NSInteger)port
inputStream:(NSInputStream **)inputStreamPtr
outputStream:(NSOutputStream **)outputStreamPtr
{
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;

assert(hostName != nil);
assert( (port > 0) && (port <65536) );
assert( (inputStreamPtr != NULL) ||(outputStreamPtr != NULL) );

readStream = NULL;
writeStream = NULL;

(
NULL,
(CFStringRef) hostName,
port,
((inputStreamPtr != nil) ?&readStream : NULL),
((outputStreamPtr != nil) ? &writeStream : NULL)
);

if (inputStreamPtr != NULL) {
*inputStreamPtr = [NSMakeCollectable(readStream)autorelease];
}
if (outputStreamPtr != NULL) {
*outputStreamPtr =[NSMakeCollectable(writeStream) autorelease];
}
}

@end

以上代码为NSStream类增加了一个类方法叫做:
getStreamsToHostNamed:port:inputStream:outputStream:
现在你可以在iPhone app中,使用该方法了。

作者注:该类别代码基于苹果文档 Apple’s Technical Q&A1652。
在NetworkViewController.m中,加入如下代码:

#import "NetworkViewController.h"
#import "NSStreamAdditions.h"
@implementation NetworkViewController
NSMutableData *data;
NSInputStream *iStream;
NSOutputStream *oStream;
定义connectToServerUsingStream:portNo:方法如下。在方法中我们连接了服务器并创建了一对输入/输出流:
-(void) connectToServerUsingStream:(NSString*)urlStr portNo: (uint) portNo {
if (![urlStrisEqualToString:@""]) {
NSURL *website =[NSURL URLWithString:urlStr];
if (!website) {
NSLog(@"%@ is not a valid URL");
return;
} else {
[NSStream getStreamsToHostNamed:urlStr
port:portNo
inputStream:&iStream
outputStream:&oStream];
[iStreamretain];
[oStream retain];
[iStreamsetDelegate:self];
[oStream setDelegate:self];
[iStream scheleInRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
[oStream scheleInRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
[oStreamopen];
[iStream open];
}
}
}

方法中,我们将input和output放到了runloop中以便接收事件。这样做,是为了防止流中没有有效数据时代码产生阻塞。input和
output的委托属性都设置为self,因此我们还应该在NetworkViewController类中实现委托方法以便接收流数据。
使用 CFNetwork 进行网络通信
另一种TCP通信的方法是使用CFNetwork框架。CFNetwork属于核心服务框架(C语言库),提供了对HTTP、FTP、BSDsockets等网络协议的封装。
为了演示如何使用CFNetwork框架,在NetworkViewController.m文件中加入如下语句:

#import "NetworkViewController.h"
#import "NSStreamAdditions.h"

@implementation NetworkViewController
NSMutableData *data;
NSInputStream *iStream;
NSOutputStream *oStream;
CFReadStreamRef readStream = NULL;
CFWriteStreamRef writeStream = NULL;
定义 connectToServerUsingCFStream:portNo: 方法如下:
-(void) connectToServerUsingCFStream:(NSString *)
urlStr portNo: (uint) portNo{
(kCFAllocatorDefault,
(CFStringRef) urlStr,
portNo,
&readStream,
&writeStream);
if (readStream &&writeStream){
CFReadStreamSetProperty(readStream,
,
kCFBooleanTrue);
CFWriteStreamSetProperty(writeStream,
,
kCFBooleanTrue);
iStream =(NSInputStream *)readStream;
[iStream retain];
[iStream setDelegate:self];
[iStreamscheleInRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
[iStream open];
oStream = (NSOutputStream *)writeStream;
[oStreamretain];
[oStream setDelegate:self];
[oStream scheleInRunLoop:[NSRunLoopcurrentRunLoop]
forMode:NSDefaultRunLoopMode];
[oStream open];
}
}

先,我们使用()方法创建了一个到服务器的TCP/IP连接,以及一对输入输出
流。然后将它们转换为等价的O-C对象——NSInputStream和NSOutputStream。接下来跟前面一样,设置delegate属性并放
到runloop中运行。
发送数据
要想服务器发送数据,请使用NSOutputStream对象:
-(void) writeToServer:(const uint8_t *) buf {
[oStream write:bufmaxLength:strlen((char*)buf)];
}
这段代码发送了一个无符号整型数组到服务器。
读取数据
当服务器有数据到达,stream:handleEvent:方法被触发。因此我们只需在这个方法中读取数据即可。
- (void)stream:(NSStream *)streamhandleEvent:(NSStreamEvent)eventCode {

switch(eventCode) {
case :
{
if (data == nil) {
data = [[NSMutableData alloc] init];
}
uint8_t buf[1024];
unsigned int len = 0;
len = [(NSInputStream *)stream read:buf maxLength:1024];
if(len) {
[data appendBytes:(const void *)buf length:len];
int bytesRead;
bytesRead += len;
} else {
NSLog(@"No data.");
}

NSString *str =[[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
NSLog(str);
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Fromserver"
message:str
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
[alert release];

[str release];
[data release];
data = nil;
} break;
}
}
该方法有两个参数。一个NSStream对象和一个NSStreamEvent常量。NSStreamEvent常量可能包含以下取值:
NSStreamEventNone -- 没有任何事件
NSStreamEventOpenCompleted -- 流打开成功.
-- 此时流中有字节待读取
-- 此时可向流中写入数据
NSStreamEventErrorOccurred -- 有错误发生
NSStreamEventEndEncountered -- 到达流的末尾
对于输入流,你应当检测 常量。在这里,我们从输入流中读取了数据并显示在UIAlertView中。

stream:handleEvent:方法中,很容易检查到连接错误。在本例中,如果
connectToServerUsingStream:portNo:方法连接服务器失败,则在stream:handleEvent方法将被调用并在
NSStreamEvent参数中传递一个NSStreamEventErrorOccured错误。

7、两台服务器之间怎么通信

我说一种最简单的方法:1、路由上映射80以及远程端口给Web服务器的80和远程端口。2、路由上映射其他端口(如4489)给数据库服务器的远程端口。这样就解决了2台服务器都需要远程登陆的问题了。3、这2个机器,默认应该是走的内网路由方式连接,你就用内网IP把他们连接起来。

与服务器通讯相关的知识