导航:首页 > IDC知识 > tcp文件服务器

tcp文件服务器

发布时间:2020-12-04 17:23:30

1、delphi 在服务器和客户端传文件:用tcp还是直接用文件流好点?

网络编程里应该有这些。文件流简单说,就是把一个文件用流的方式获版得。比如你在权代码中经常看到用个Tfile类型的对象可以获取到一个文件。然后对这个对象的操作就是对文件的操作。
TCP是传输协议。
通常别人会说用TcpServer控件和TcpClient控件。就可以达到网络传输的目的。
当然,你也可以用UDP方式传输,速度更快,但是不可靠,而且如果网络涉及到外网和内网的话,还需要打洞。比较麻烦。用TCP则省去了这些。方便快捷。

2、tcp多进程并发文件服务器代码?

线程是相对独来立的执行单位,是自计算机系统进行调度的最小单位,其切换由操作系统控制,称之为短作业调度。换句话说您没有任何必要去手动调度线程。如果您想要实现的是连接分配的话,请参考您的操作系统的进程间通信和同步文档,一般底层编程都是通过共享存储区,消息队列等方式实现的。如果是高层次的库实现网络通信,请参考库文档,比如C#和Java都提供了足够的接口实现此类功能。

3、TCP服务器是什么

TCP指的是传输控制协议。它是一种面向连接导向的、可靠地及基于字节流的运输层通信协议。而在接触TCP中还有UDP,UDP也是一项重要的传输协议。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端
1、提供IP环境下的数据可靠传输(一台计算机发出的字节流会无差错的发往网络上的其他计算机,而且计算机A接收数据包的时候,也会向计算机B回发数据包,这也会产生部分通信量),有效流控,全双工操作(数据在两个方向上能同时传递),多路复用服务,是面向连接,端到端的传输;
2、面向连接:正式通信前必须要与对方建立连接。事先为所发送的数据开辟出连接好的通道,然后再进行数据发送,就像打电话。
3、TCP支持的应用协议:FTP 文件传送、RLogin 远程登录、SMTP POP3 电子邮件、NFS 网络文件系统、远程打印、远程执行、名字服务器终端服务器等服务类型。

4、c语言写的,简单的tcp文件服务器

41

5、怎样实现TCP客户端和TCP服务器端文本信息和文件的同时传输?

这类的软件其实很多的,包括windows自带的插件都是具有这个功能,网上也有这类软件可以用的。

6、怎样在自己电脑上建立一个TCP服务器

在自己电脑上建立一个TCP服务器的方法如下:
1、 创建一个ServerSocket;
2、从ServerSocket接受客户连接请求;
3、创建一个服务线程处理新的连接;
4、在服务线程中,从socket中获得I/O流;
5、对I/O流进行读写操作,完成与客户的交互;
6、关闭I/O流;
7、关闭Socket。

创建一个ServerSocket的方法如下:
ServerSocket server = new ServerSocket(post)
Socket connection = server.accept();
ObjectInputStream put=new ObjectInputStream(connection.getInputStream());
ObjectOutputStreamoput=newObjectOutputStream(connection.getOutputStream())。

7、怎么使用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错误。

8、某用户利用FTP从远程主机下载了3个文件,在FTP客户机和FTP服务器之间至少要建立多少次TCP连接?为什么?

4次。FTP协议分控制连接和数据连接。控制连接一直存在,而每传输一个文件就需要新建一个数据连接。所以至少要创建4次TCP连接。

9、局域网TCP服务器,需要外网能访问,怎么做?

首先你要明白路由是不是共享式NAT上网的,也就是说router port nat出去的数据是一直堆叠或者持续变版动的,而不做端口映射基本没权有实现的可能!

当然如果是静态NAT,那么直接做静态NAT就可以了!

如楼上灰鸽子,是直接通过本地服务端(中灰鸽子端)连接广域网客户端(控制端),然后服务端和建立的联系。如通过80端口出数据,穿透防火墙等等。

你可以尝试修改数据包出去的port,同时在两个端进行修改!
-------------
抓取到数据包的时候注意地址段,关键在于让路由到router nat到数据包的时候,能找到你的主机A或者W。
你可以参照一些三层更新之类的软件。

10、求一个TCP源程序,客户端发送文件,服务器接收文件,用VC6.0编译可以通过,只要能采纳的 ,可以充话费给你

vs2008,行不? 这边头谁还用VC6.0呀

与tcp文件服务器相关的知识