我想知道是否有办法处理WPF应用程序退出事件,以便取消退出.用例是我有一个客户端 - 服务器情况,其中服务器是WPF应用程序.我希望WPF应用程序在关闭时通知客户端,但取消关闭过程.客户端应该收到关闭通知,执行自己需要的清理,然后通过请求请求WPF应用程序关闭.
这可能吗?
如何使用clientserverMac OS X上的功能编译Vim ?我有vim-7.3.tar.bz2源码
我知道MacVim内置了它,但它只在GUI运行时才有效.我想使用CLI版本,因为我的工作使用CLI更容易(例如,我可以轻松切换到终端).
我使用以下./configure选项编译了Vim 7.3
./configure --enable-rubyinterp --enable-pythoninterp --with-features=huge
Run Code Online (Sandbox Code Playgroud)
我在Unix和Linux上看过这个问题,但它只关注Ubuntu解决方案.此外,由于我启用了huge功能集,我应该期待+clientserver,根据vimdoc:
因此,如果某个功能标有"N",则它包含在Vim的普通版,大版和大版中.
服务器功能仅适用于GUI MacVim.要重现这个:
$ Applications/MacVim.app/Contents/MacOS/Vim --servername VIM
Run Code Online (Sandbox Code Playgroud)
在另一个控制台:
$ vim --serverlist # does not output anything
Run Code Online (Sandbox Code Playgroud)
如果我要启动GUI MacVim,
$ vim --serverlist
VIM1
Run Code Online (Sandbox Code Playgroud)
但我的要求是在CLI Vim中工作.
我有客户端和服务器程序,现在通过TCP进行通信.我正在尝试使用POSIX消息队列(当然,在客户端和服务器位于同一台机器上的情况下).我希望它能提高性能(特别是通过减少延迟).
我已经解决了大部分问题,但我不确定一件事:如何建立"连接".服务器同时接受来自多个客户端的连接,所以我很想模仿TCP连接建立过程,如下所示:
select(2)像TCP一样使用).您可能会看到此方案与常见的TCP方法类似,这并非偶然.但是,我想知道:
请记住,之前我没有使用POSIX消息队列(我之前使用过的是IBM WebSphere MQ,但这有点不同).该平台是Linux.
我试图在Ruby中创建一个简单的SSL客户端和服务器.但我收到一个神秘的错误消息,文档没有任何帮助.
这是我的服务器代码:
#!/usr/bin/ruby
require "gserver"
require "openssl"
listeningPort = Integer(ARGV[0])
class Server < GServer
def initialize(listeningPort)
@sslContext = OpenSSL::SSL::SSLContext.new
@sslContext.cert = OpenSSL::X509::Certificate.new(File.open("MyCert.pem"))
super(listeningPort, "0.0.0.0")
end
def serve(io)
begin
ssl = OpenSSL::SSL::SSLSocket.new(io, @sslContext)
ssl.sync_close = true
ssl.connect
while (lineIn = ssl.gets)
lineIn = lineIn.chomp
$stdout.puts "=> " + lineIn
lineOut = "You said: " + lineIn
$stdout.puts "<= " + lineOut
ssl.puts lineOut
end
rescue
$stderr.puts $!
end
end
end
server = Server.new(listeningPort)
server.start
server.join
Run Code Online (Sandbox Code Playgroud)
客户端代码类似:
#!/usr/bin/ruby
require "socket"
require "thread" …Run Code Online (Sandbox Code Playgroud) 我正在使用Apache Commons FTP上传文件.在上传之前,我想检查服务器上是否已存在该文件,并从该服务器备份到同一服务器上的备份目录.
有谁知道如何将文件从FTP服务器复制到同一台服务器上的备份目录?
public static void uploadWithCommonsFTP(File fileToBeUpload){
FTPClient f = new FTPClient();
FTPFile backupDirectory;
try {
f.connect(server.getServer());
f.login(server.getUsername(), server.getPassword());
FTPFile[] directories = f.listDirectories();
FTPFile[] files = f.listFiles();
for(FTPFile file:directories){
if (!file.getName().equalsIgnoreCase("backup")) {
backupDirectory=file;
} else {
f.makeDirectory("backup");
}
}
for(FTPFile file: files){
if(file.getName().equals(fileToBeUpload.getName())){
//copy file to backupDirectory
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
编辑过的代码:仍有问题,当我备份zip文件时,备份文件已损坏.
有没有人知道它的原因?
public static void backupUploadWithCommonsFTP(File fileToBeUpload) {
FTPClient f = new FTPClient();
boolean backupDirectoryExist = false;
boolean fileToBeUploadExist = …Run Code Online (Sandbox Code Playgroud) 这更像是一个概念问题,不一定与任何特定技术相关.假设您在服务器上有一些数据库,一些REST/JSON API用于访问该数据库中的内容,一些移动客户端显示通过API检索的数据.
在客户端上有一些缓存机制并且只要客户端只读取就能够启用对数据的脱机访问会很好(在我的情况下,拒绝对脱机客户端的写访问以避免必须管理所有可能发生的令人讨厌的冲突).
似乎解决这个问题的一个好方法是在客户端上提供服务器数据库模型的子集,并将数据从服务器同步到客户端.然后,访问本地数据库可能会立即返回结果,但也会触发对服务器的更新请求.如果服务器返回修改后的数据,则客户端模型会同步其本地数据库并通知显示数据更改.
最终的目标当然是用户可以浏览信息而不管他的互联网连接的稳定性,并且只要他不修改任何数据,就不会受到连接对话或类似的烦恼.
现在从实现的角度来看......一方面将服务器数据库直接耦合到客户端数据库似乎是一个坏主意,因为它们可能来自不同的供应商.我想至少在数据库实现之上需要一个独立于供应商的模型.另一方面,将数据从服务器数据库转换为某种传输格式,而不是将其放回客户端数据库,这似乎是一个很大的开销.
有任何建议如何以优雅和可维护的方式解决这个问题?
我正在构建一个Android应用程序,只要应用程序正在运行,它就会定期与服务器通信.
我通过在应用程序启动时启动与服务器的连接来执行此操作,然后我有一个单独的thread用于接收调用的消息ReceiverThread,这thread将从中读取消息socket,对其进行分析,并将其转发到应用程序的相应部分.
它thread在循环中运行,读取它必须读取的内容,然后阻止read()命令直到新数据到达,因此它将大部分时间用于阻止.
我处理通过另一个线程发送消息,称为SenderThread.我想知道的是:我应该SenderThread以类似的方式构建吗?我应该为这个线程维护一些形式的队列,让它发送队列中的所有消息,然后阻塞,直到新消息进入队列,或者每次需要发送消息时我应该只启动线程的新实例,让它发送消息,然后"死"?我倾向于第一种方法,但我不知道在性能方面(在内存中保持阻塞线程与初始化新线程)以及代码正确性方面实际上更好.
此外,由于我的所有活动都需要能够发送和接收消息,我持有对我Application班级中两个线程的引用,这是一种可接受的方法还是我应该以不同的方式实现它?
我遇到的一个问题是,有时如果我关闭我的应用程序并再次运行它实际上有两个ReceiverThread实例,所以我得到一些消息两次.
我猜这是因为我的应用程序实际上没有关闭,前一个线程仍处于活动状态(在read()操作上被阻止),当我再次打开应用程序时,新线程被初始化,但两者都连接到服务器,所以服务器将消息发送给两者.有关如何解决此问题的任何提示,或者如何完全重新组织它以便它是正确的?
我试着查看这些问题,但发现了我的第一个问题的一些相互矛盾的例子,没有什么是有用的,适用于我的第二个问题......
我想写一个基于netty的客户端.它应该有方法public String send(String msg); 哪个应该从服务器或某个未来返回响应 - doesen't不重要.它也应该是多线程的.像这样:
public class Client {
public static void main(String[] args) throws InterruptedException {
Client client = new Client();
}
private Channel channel;
public Client() throws InterruptedException {
EventLoopGroup loopGroup = new NioEventLoopGroup();
Bootstrap b = new Bootstrap();
b.group(loopGroup).channel(NioSocketChannel.class).handler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel ch) throws Exception {
ch.pipeline().addLast(new StringDecoder()).
addLast(new StringEncoder()).
addLast(new ClientHandler());
}
});
channel = b.connect("localhost", 9091).sync().channel();
}
public String sendMessage(String msg) {
channel.writeAndFlush(msg);
return ??????????;
}
Run Code Online (Sandbox Code Playgroud)
}
我不知道如何在调用writeAndFlush()之后从服务器检索响应; 我该怎么办? …
client-server ×10
java ×3
android ×2
c ×1
certificate ×1
compilation ×1
connection ×1
database ×1
events ×1
exit ×1
ftp ×1
ftp-client ×1
macos ×1
netty ×1
openssl ×1
posix ×1
request ×1
response ×1
ruby ×1
ssl ×1
vim ×1
wpf ×1