硬件客户端: c语言实现的客户端socket
通讯协议:TCPIP
服务端:希望用java来写客户端程序
客户端发送数据给服务端有两种方式:
1、 报警数据:直接发送数据到服务端,服务端接收数据解析处理后直接入数据库。
2、 正常数据:首先由服务器发送一个命令给客户端,客户端根据命令的类型返回不同的数据给服务器端,服务器端将数据解析后处理。处理结果不一定存入业务系统的服务器。一些返回的数据是标志状态的,例如:服务器发命令“停止工作” 给客户端,客户单接收到命令后执行命令,并且返回一个数据表示执行命令是否成功。
3、 问题:多客户端的情况,服务器接收到的数据怎样知道是哪个客户端发过来的数据。
4、 服务器发送命令给客户端的时候,怎样知道该发给哪个客户端。
请问这样的java socket服务器端的程序该怎么写。
模式:服务器端socket——客户端socket(多客户端)
------解决方案--------------------
着你还是查查资料吧,标准的socket通讯,没什么好说的。
------解决方案--------------------
3、 问题:多客户端的情况,服务器接收到的数据怎样知道是哪个客户端发过来的数据。
4、 服务器发送命令给客户端的时候,怎样知道该发给哪个客户端。
可以把客户端连接的socket保存到列表里,然后从列表里边拿到对应客户的连接进行处理。
我做的第一个java项目和你说的需求一样。
------解决方案--------------------
资料百度一下就好了,java socket资料还是比较多的。这个程序需要的是java socket技术和多线程技术。
基本上就是启动server
ServerSocket serverSocket = new ServerSocket(port);
while(true){
//监听
Socket socket = serverSocket.accept();
//如果是多客户端的要保存在这socket 到列表里, 或者设计一个 worker的抽象类来保存socket列表
//接收到信息 创建子线程 或者写个线程池直接拿线程
//worker类可以实现runnable接口,这样更灵活
Thread worker = new Thread(){
public void run(){
//处理逻辑
}
};
worker.start();
}
------解决方案--------------------
真理源于实践,先动手写个最简单的吧,保证简单的可以正确执行,然后再一点点扩展。
------解决方案--------------------
这个东西,刚写过,要服务器端吧。java写的。
public class Server {
public static void main(String[] args) {
try {
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("serverFile.txt");
ServerSocket ss = new ServerSocket(8099);
System.out.println("服务器已启动,等到客户端的连接...");
Socket socket = ss.accept(); // -->服务器收到客户端的数据后,创建与此客户端对话的Socket
DataInputStream in = new DataInputStream(socket.getInputStream());
// -->用于接收客户端 发来的数据的输入流
System.out.println("服务器接受到客户端的连接请求:" + in.readUTF());
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String data = null;
StringBuffer sb = new StringBuffer();
while((data = br.readLine())!=null)
{
sb.append(data);
}
out.writeUTF(sb.toString());//服务器响应给客户端
socket.close();
ss.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
把不需要的东西就可以删除了
------解决方案--------------------
这个客户端的也是Java的吧?