我想通过 Linux 命令将简单数据(比如“hello world”)发送到另一个系统(以及特定的端口号)。我正在寻找类似于客户端程序的命令?谁能帮我吗?
我尝试使用 CURL 但没有正确理解。如果在 CUrl 中可能的话你能举一些例子吗?
提前致谢
我正在使用 poll 来实现具有多路复用的客户端-服务器模型的服务器端。
服务器正在运行一个主循环。
在每个循环中,我都会检查 struct pollfd 数组中的所有 fd,直到找到n包含我内容的套接字(其中n是 poll 返回的数字)。
此外,使用 poll 时没有超时(-1 作为参数)。
因此,如果在侦听套接字上请求新连接,我会将套接字和一些客户端信息插入到我保留的活动连接列表中。
处理 poll 数组最有效的方法是什么?
我是否应该定义一个大小为 10 的小数组,并且如果有更多客户端为大小为 20 或 50 的数组重新分配内存?
或者我应该:(a)释放 struct pollfd 类型的数组,并且(b)重新分配它,其大小等于列表的大小(监听套接字+1)=>每次客户端关闭连接时(因此我必须从数组中删除一个元素(可能将套接字设置为-1,以便 poll 忽略它)导致数组中未使用的空间)
你有什么建议吗?
感谢您的时间
编辑: 我想我已经找到了一个解决方案,每次客户端断开连接时都使用 realloc 和 memmove 进行移位,以覆盖 fds 数组中的套接字。
我正在尝试构建一个 java.net 应用程序,其中客户端和服务器必须通过序列化集合类型作为byte[].
由于未知原因,我的 DataInputStream 无法解析该方法readAllBytes()。
一个朋友把它扔进了他的 IDE,它没有抱怨。我不确定这怎么可能是一个版本问题,但我检查过并且我没有错误配置我的项目。我正在使用 Java 8。
public void startClient() {
try {
Socket client = new Socket("localhost", 7000);
DataOutputStream out = new DataOutputStream(client.getOutputStream());
out.writeUTF("Hi i'm " + client.getLocalSocketAddress());
DataInputStream input = new DataInputStream(client.getInputStream());
byte[] sent = input.readAllBytes(); //"can't resolve method 'readAllBytes()'
getDataFromClient(input.readAllByes());
//"can't resolve method 'readAllBytes()'
client.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
我实际上确定应该支持此方法,但我无法弄清楚为什么不支持,因为它被列为从 Input Stream (docs.oracle.com) 继承的方法。
包含该方法的项目也是一个 Gradle …
我想通过 rsync 将 abc.txt 文件从 Android 客户端传输到服务器。不幸的是,我在 Android 开发者网站上没有找到任何相同的文档。有没有办法在非 root 设备中使用 rsync 从客户端传输数据。
将 100 MB 数据从客户端传输到服务器的最佳实践是什么?我们始终可以使用数据库并从中进行块上传。除了数据库划分和同步设计之外,是否还有可遵循的最佳实践。
通过互联网将某些安装的软件与某台计算机连接的最佳方法是什么?我想每个安装包(磁盘)都应该有唯一的序列号.并且序列号应该在安装过程中连接到计算机的唯一参数,不是吗?据我所知,有一些approches从计算机CPU ID和发送到服务器.其他人则重新使用MAC地址.所以我有点困惑,知道什么专家做什么,今天推荐.
请分享您的经验,并告诉我这个过程的正确流程.
我将构建一个客户端 - 服务器应用程序.这里的客户端是iPad(或基于Android的)平板电脑.服务器是普通的电脑.客户端和服务器都连接到同一网络(使用WiFi).
客户端和服务器之间的通信是否有标准方式(协议)?是否有可用于简化此通信的框架?
谢谢
我无法正确格式化我的PUT请求以使我的服务器识别我的客户端应用程序的PUT命令.
这是我的一段代码,它将JSON字符串放入服务器.
try {
URI uri = new URI("the server address goes here");
URL url = uri.toURL();
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());
out.write(gson.toJson(newClient));
out.close();
} catch (Exception e) {
Logger.getLogger(CATHomeMain.class.getName()).log(Level.SEVERE, null, e);
}
Run Code Online (Sandbox Code Playgroud)
这是应该捕获PUT命令的代码
@PUT
@Consumes("text/plain")
public void postAddClient(String content, @PathParam("var1") String var1, @PathParam("var2") String var2) {
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
这是非常糟糕的我必须做一个硬重启(按下电源按钮),它甚至没有给我时间调试,所以我基本上搞砸了,如果我没有在这里得到答案.我知道它是服务器端(因为它发生在我不运行客户端时,但如果我这样做也会发生).
这是服务器代码:
package cypri.games.cybatarserver;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class CybatarServer extends JFrame implements Runnable{
String verNum = "0.0.0";
JScrollPane jsp;
JTextArea mainText;
boolean stopServer = false;
boolean waitForPlayers = true;
Vector<Player> playersConnected;
byte playerID = -1;
public CybatarServer(){
playersConnected = new Vector<Player>();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setBounds(100, 100, 400, 100);
this.setTitle("Cybatar Server " + verNum);
mainText = new JTextArea(50, 10);
mainText.setText("Welcome to CybatarServer "+ verNum + "!\n");
mainText.setEditable(false);
jsp = new JScrollPane(mainText); …Run Code Online (Sandbox Code Playgroud) 我写了一个小型客户端 - 服务器应用程序,它运行在两台或多台不同的机器上,用于重启/关闭.由于我对客户端 - 服务器应用程序比较陌生,所以我在这里采用了关于Delphi的方法.简而言之,我的服务器应用程序等待端口7676上的连接,将客户端添加到客户端列表然后什么也不做(稍后将实现关闭和重新启动过程).但是,即使它是被动的,只需连接两个客户端,它就会占用高达90%的CPU.这是客户端代码,由TidTCPServer和TidAntiFreeze组成:
type
PClient = ^TClient;
TClient = record
PeerIP : string[15]; { Client IP address }
HostName : String[40]; { Hostname }
Connected, { Time of connect }
LastAction : TDateTime; { Time of last transaction }
AContext : Pointer; { Pointer to thread }
end;
[...]
procedure TForm1.StartServerExecute(Sender: TObject);
var
Bindings: TIdSocketHandles;
begin
//setup and start TCPServer
Bindings := TIdSocketHandles.Create(TCPServer);
try
with Bindings.Add do
begin
IP := DefaultServerIP;
Port := DefaultServerPort; …Run Code Online (Sandbox Code Playgroud) 我目前正致力于在Android上编写一个简单的消息应用程序.我把服务器放在一个叫做的类中runServer,它运行得很好.然后我在我的方法中有一个客户端mainActivity.我有一个button,有一个onclick="startClient".但每当我点击它时button,我都会收到错误.
03-11 13:01:40.622: E/AndroidRuntime(718): java.lang.IllegalStateException:
Could not find a method startClient(View) in the activity class com.example.datorkomprojekt.MainActivity
for onClick handler on view class android.widget.Button with id 'connect'
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能解决这个问题?
主要活动
public class MainActivity extends Activity {
private Socket socket;
private ObjectInputStream ois;
private DataOutputStream dos;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
runOnUiThread(new Runnable(){
public void run(){
EditText et = (EditText) findViewById(R.id.message_id);
String message = et.getText().toString();
EditText et1 = (EditText) findViewById(R.id.messages); …Run Code Online (Sandbox Code Playgroud) client-server ×10
java ×4
android ×3
c ×1
client-side ×1
curl ×1
delphi ×1
file-upload ×1
gradle ×1
hardware-id ×1
indy10 ×1
io ×1
ipad ×1
licensing ×1
linux ×1
polling ×1
protocols ×1
rest ×1
rsync ×1
sendmessage ×1
server-side ×1
sockets ×1
xml ×1