我正在写一个客户端 - 服务器程序,我希望它发送一个图像.代码如下:
//RECEIVER
while(true){
try{
socket = server.accept();
out = new ObjectOutputStream(socket.getOutputStream());
out.flush();
in = new ObjectInputStream(socket.getInputStream());
System.out.println("Connected to "+PORTA+".");
while(!socket.isClosed()){
System.out.println("\nPrint the action");
azione = reader.readLine();
if(azione.equals("screenshot")){
out.writeObject("screenshot");
out.flush();
BufferedImage screenshot = ImageIO.read(in);
ImageIO.write(screenshot, "jpg", new File("screenshot.jpg"));
}
}catch(Exception ex){
System.out.println("Not connected.\n");
}
}
Run Code Online (Sandbox Code Playgroud)
和服务器:
while(true){
try{
socket = new Socket(INDIRIZZO, PORT);
out = new ObjectOutputStream(socket.getOutputStream());
out.flush();
in = new ObjectInputStream(socket.getInputStream());
while(!socket.isClosed()){
try {
action = (String)in.readObject();
if(azione.equals("screenshot")){
BufferedImage screenshot = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
ImageIO.write(screenshot, "jpg", out);
}catch(Exception …Run Code Online (Sandbox Code Playgroud) 在谷歌搜索如何在聊天信使中发送/接收消息之后,我遇到了他们使用基于队列的消息系统.我只想弄清楚这个功能的高级设计
每个矿山的HLD理解: - 说朋友1和朋友2在线.朋友1已建立到Web服务器1的HTTP Web连接,并且朋友2已建立到Web服务器2的HTTP Web连接.朋友1将消息发送给朋友2.
现在,一旦消息到达web服务器1,我需要将消息传送到web服务器2,以便可以通过已建立的web连接将消息推回给朋友2.
我相信这里可以使用分布式自定义Java队列将消息从一个服务器传播到另一个服务器.一旦消息到达一个服务器,它就会将其推送到分布式队列(由于负载平衡和高可用性而分配队列)和消息内容,fromUserId,toUserId.队列中将有侦听器,它将看到poppedIn消息的目标userId,并查找哪个webserver目标userId处于活动状态.如果用户处于活动状态,则弹出消息并将其推送到客户端,否则将其存储在db中,以便在联机后可以将其拉出一次.要查看哪个用户在哪个服务器上处于活动状态,我们可以使用userId作为键维护树形图,将值维护为serverName以便高效查找
可能实际设计必须比上述简要更复杂/可扩展.想知道这是否是可扩展聊天信使的正确方向?
此外,我认为我们需要有多个分布式队列,而不是一个用于这种可扩展应用程序的队列.但是,如果我们有多个分布式队列,系统将如何确保跨分布式队列的FIFO消息传递?
我正在使用基于XML的有效负载在iPhone和网站之间同步两个业务对象,并且愿意为最佳例程征求一些想法.
这个问题的本质是相当通用的,我可以看到它适用于需要在Web实体和客户端(桌面,移动电话等)之间同步业务对象的各种不同系统.
可以双方编辑,删除和更新业务对象.双方都可以在本地存储对象,但同步仅在iPhone端启动,以便断开连接查看.所有对象都有一个updated_at和created_at时间戳,并且两边都有一个RDBMS支持(iPhone端的SQLite和网络上的MySQL ......再次我认为这不重要)并且手机确实记录了最后一次尝试同步.否则,不存储其他数据(此刻).
您将使用什么算法来最小化系统之间的网络聊天以进行同步?如果"软删除"不是一个选项,你将如何处理删除?您会添加哪些数据模型更改以设置此功能?
语境:
我需要开发一个监视服务器来监视我们的一些应用程序(这些应用程序在c#中).所以我决定使用WCF开发系统,这似乎适合我的需求.
这些应用程序在启动时必须将自己注册到监视服务器.之后,监视服务器可以调用这些应用程序的Start或Stop方法.
一切都在同一台机器上完全执行,无需远程执行任何操作.
所以我开发了一个很好的原型,一切正常.每个应用程序将自己注册到监视服务器.
题:
ApplicationRegistrationService(请参阅下面的代码)是监视服务的实现,由于ServiceBehavior属性,它是一个单例实例.
这是我的问题:我想访问ApplicationRegistrationService每个示例的内容,从我的服务器(ConsoleMonitoringServer在示例中)连接的应用程序的数量.但是,我不知道如何实现这一目标.
我是否需要在我的服务器中创建一个通道,就像我在客户端(ConsoleClient)中所做的那样,或者它是否有更好的方法来实现这一目标?
码:
出于此问题的目的,代码非常简化:
//The callback contract interface
public interface IApplicationAction
{
[OperationContract(IsOneWay = true)]
void Stop();
[OperationContract(IsOneWay = true)]
void Start();
}
[ServiceContract(SessionMode = SessionMode.Required,
CallbackContract = typeof(IApplicationAction))]
public interface IApplicationRegistration
{
[OperationContract]
void Register(Guid guid, string name);
[OperationContract]
void Unregister(Guid guid);
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single,
ConcurrencyMode = ConcurrencyMode.Multiple)]
public class ApplicationRegistrationService : IApplicationRegistration
{
//IApplicationRegistration Implementation
}
public class ApplicationAction : IApplicationAction …Run Code Online (Sandbox Code Playgroud) 所以我们有一个软件,它的SQL语句编写得很糟糕,导致表中的每一行都被返回.表中有几百万行,因此这会导致严重的内存问题和客户端计算机崩溃.供应商正在为该问题创建补丁,但仍需要几周时间.与此同时,我们试图找出一种限制服务器端返回结果数量的方法,就像临时修复一样.
我没有真正的希望有一个解决方案,我环顾四周,并没有真正看到任何方法这样做,但我希望有人可能有一个想法.
先感谢您.
编辑
我忘记了一条重要的信息,我们无法访问源代码,因此我们无法在形成SQL语句的客户端更改此信息.没有真正的服务器端组件,客户端只是直接访问数据库.任何解决方案基本上都需要一个过程,触发器或某种SQL-Server 2008设置/命令.
我是Android平台的新手.我需要使用我的Android UDP客户端与UDP服务器建立连接.现在,我需要知道如何在Android中使用UDP.请指导我这样做.
我正在尝试从服务器到客户端进行简单的文件传输.
它需要像这样:
客户端要求提供文件.
服务器将文件发送到客户端.
现在在代码中(下面)(这是我找到的唯一代码,很难找到)它只向我发送一个"好"的文本文件(甚至只能使它成为客户端中的一行).如果我尝试发送任何其他文件类型(如图像或rar文件),它会被损坏.
那么,有人可以帮我找一些可以发送和接收所有类型文件的工作代码(用Java),或者向我解释这段代码的问题是什么.
服务器端:
public class FileServer {
public static void main(String args[])throws IOException
{
ServerSocket ss=null;
try
{
ss=new ServerSocket(8081);
}
catch(IOException e)
{
System.out.println("couldn't listen");
System.exit(0);
}
Socket cs=null;
try
{
cs=ss.accept();
System.out.println("Connection established"+cs);
}
catch(Exception e)
{
System.out.println("Accept failed");
System.exit(1);
}
PrintWriter put=new PrintWriter(cs.getOutputStream(),true);
BufferedReader st=new BufferedReader(new InputStreamReader(cs.getInputStream()));
String s=st.readLine();
System.out.println("The requested file is : "+s);
File f=new File(s);
if(f.exists())
{
BufferedReader d=new BufferedReader(new FileReader(s));
String line;
while((line=d.readLine())!=null)
{
put.write(line);
put.flush();
}
d.close();
System.out.println("File …Run Code Online (Sandbox Code Playgroud) 我正在研究客户端/服务器应用程序.我准备了许多文章,并发现了一个非常常见的声明"Creation/deletion of socket is very expensive process in terms of using system resources".但是没有解释它如何消耗如此多的资源.
任何人都能看到这个吗?
我使用套接字编程创建了多个客户端 - 服务器聊天应用程序,我可以在命令提示符下将其部署为JAR文件.现在我需要做些什么来改变使用tomcat服务器在Web浏览器上运行这个应用程序?
我的服务器代码:
package com.Aricent;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.*;
import java.sql.DriverManager;
public class Server {
static ServerSocket serverSocket=null;
static Socket clientSocket=null;
static final int max=20;
static clientThread[] threads=new clientThread[max];
public static void main(String arg[])
{
int portNumber=2222;
try{
serverSocket=new ServerSocket(portNumber);
}catch(IOException e)
{
System.out.println(e);
}
while(true)
{
try{
clientSocket=serverSocket.accept();
int i=0;
for(i=0;i<max;i++)
{
if(threads[i]==null)// searching for empty position
{
(threads[i]=new clientThread(clientSocket, threads)).start();
break;
}
}
if(i==max)
{
PrintStream os=new PrintStream(clientSocket.getOutputStream());
os.println("Server …Run Code Online (Sandbox Code Playgroud) 我想使用protobuf在客户端和服务器之间来回发送消息.在我的情况下,我想从服务器向客户端发送任意数量的protobuf消息.如何在C++中快速构建它?
注意:在汇总了一个非常有用的Kenton Varda答案和Fulkerson对stackoverflow的回答之后,我写了这个问题和我的答案.其他人也提出了类似的问题并遇到了类似的障碍 - 请看这里,这里和这里.
我是protobuf和asio的新手,所以请随时纠正/建议改进,或提供自己的答案.