以下代码基于std :: net :: TcpListener上的文档提供的示例。该服务器应用程序将侦听传入的请求并发送回所有传入的数据,从而充当“回显”服务器。客户端应用程序将发送一条小消息,并期望包含相同内容的答复。
服务器:
use std::thread; use std::net::{TcpListener, TcpStream, Shutdown}; use std::io::{Read, Write}; fn handle_client(mut stream: TcpStream) { let mut data = [0 as u8; 50]; // 使用50字节缓冲区 while match stream.read(&mut data) { Ok(size) => { // 呼应一切! stream.write(&data[0..size]).unwrap(); true }, Err(_) => { println!("An error occurred, terminating connection with {}", stream.peer_addr().unwrap()); stream.shutdown(Shutdown::Both).unwrap(); false } } {} } fn main() { let listener = TcpListener::bind("0.0.0.0:3333").unwrap(); // 接受连接并处理它们,为每个连接产生一个新线程 println!("Server listening on port 3333"); for stream in listener.incoming() { match stream { Ok(stream) => { println!("New connection: {}", stream.peer_addr().unwrap()); thread::spawn(move|| { // 连接成功 handle_client(stream) }); } Err(e) => { println!("Error: {}", e); /* connection failed */ } } } // 关闭套接字服务器 drop(listener); }
客户:
use std::net::{TcpStream}; use std::io::{Read, Write}; use std::str::from_utf8; fn main() { match TcpStream::connect("localhost:3333") { Ok(mut stream) => { println!("Successfully connected to server in port 3333"); let msg = b"Hello!"; stream.write(msg).unwrap(); println!("Sent Hello, awaiting reply..."); let mut data = [0 as u8; 6]; // 使用6字节缓冲区 match stream.read_exact(&mut data) { Ok(_) => { if &data == msg { println!("可以回复!"); } else { let text = from_utf8(&data).unwrap(); println!("Unexpected reply: {}", text); } }, Err(e) => { println!("Failed to receive data: {}", e); } } }, Err(e) => { println!("Failed to connect: {}", e); } } println!("Terminated."); }
我是Java的新手,我正在尝试学习线程和套接字。所以决定按照官方的java教程制作简单的客户机-服务器应用程序。我的想法很简单--服务器等待连接,如果出现,它就用新的套接字、输入和输出生成新线程。客户端->建立连接;带有套接字、输入、输出和stdIn的新线程(读取行,然后发送到服务器)。但是我的代码出了点问题(不知道为什么)。连接已经建立,没有例外。谁能解释一下为什么不工作,如何修复它?您还可以对
问题内容: 我做一个简单的, 没有线程 客户端 - 服务器 进行GUI有两个一个按钮程序 服务器 和 客户 端。当 客户端 按下按钮时,它将按钮上的文本更改为 “ C” 并发送到 服务器 “ C” 字符串,因此 服务器 端的按钮将文本更改为 “ C” 。 服务器的 工作方式与 客户端 相似,但是发送的是 “ S” 而不是 “ C” 。他们轮流工作:轮到 客户时 , 服务器 客户端 始终首先启动。
我正在使用TCP / IP流编写客户端服务器Java程序,我的服务器连接到oracle数据库。当客户端请求一些信息时,服务器处理查询,即返回一个包含一些行的列(例如 5)。我想将整列发送回客户端,我能够发送和接收单行数据,但不能发送和接收多行(因为表包含许多行 i,e 行)....任何帮助都是可取的
创建 TCP 客户端 最简单的方法来创建一个 TCP 客户端,使用默认选项如下所示: NetClient client = vertx.createNetClient(); 配置 TCP 客户端 如果你不想使用默认值,则创建TCP 客户端时,通过传入NetClientOptions实例可以配置: NetClientOptions options = new NetClientOptions().s
创建 TCP 服务器 使用最简单的方法来创建一个 TCP 服务器,使用所有默认选项如下所示: NetServer server = vertx.createNetServer(); 配置 TCP 服务器 如果你不想默认值,可以将服务器配置通过传入一个NetServerOptions实例来创建它: NetServerOptions options = new NetServerOptions().s
在探索和实现Proact设计模式后,遇到了一个问题,即客户端(“C”客户端)连接在限制后不再接受。开始探索netty。这是我试图做的1。C客户端建立连接2。Java服务器接受连接并开始使用TCP向客户端发送8 Mb大小的字节缓冲区。有什么想法吗?netty是一个好的选择吗?我浏览了netty的一个很好的例子,不幸的是不走运。 先谢谢你。 尊敬的Ravi