社区
Java SE
帖子详情
SOCKET如何同时收发?
x3302
2006-06-01 06:35:21
我刚接触SOCKET
网上的通过SOCKET连接的C/S结构的简单聊天程序
大多是采取一问一答形式
即client对server说完话后,要等待server回应才可以继续说
反之亦然
如何可以做到双方可以随时发话?(不用UDP连接方式实现)
设想是client建两个socket分别进行收和发
但发现server好象很难识别哪个socket是做什么的。
谁有好的方法,告诉一下,谢谢!
...全文
757
5
打赏
收藏
SOCKET如何同时收发?
我刚接触SOCKET 网上的通过SOCKET连接的C/S结构的简单聊天程序 大多是采取一问一答形式 即client对server说完话后,要等待server回应才可以继续说 反之亦然 如何可以做到双方可以随时发话?(不用UDP连接方式实现) 设想是client建两个socket分别进行收和发 但发现server好象很难识别哪个socket是做什么的。 谁有好的方法,告诉一下,谢谢!
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
x3302
2006-06-01
打赏
举报
回复
我形容例子的也可以简单抽象成
server每1秒向client发出信息,client每1秒都显示这信息
client每10秒向server发出信息,server再刚才每1秒发出消息的同时
每隔10秒显示client发出的信息
x3302
2006-06-01
打赏
举报
回复
To: afgkidy(酷斯拉迪)
你这种方法还是一收一发方式的。
我把client那的sleep设成了10秒
那么server端还是要等client端的线程完成一个循环才会执行server端那些代码
我要的效果是,例如:
我先在client端发:“A1”回车;“B1”回车;“C1”回车。
server端在可以输入的状态下,仍然可以显示出“A1”,“B1”,“C1”。
你现在的程序是等于,在client端发了“A1”回车后,client端会阻塞,不能输入“B1”等
输了“A1”后,server现在会马上显示“A1”,但client要等server回话才可以继续输入“B1”等。
afgkidy
2006-06-01
打赏
举报
回复
给个我的程序参考下:程序能实现你所要的要求,自己理解吧
服务器:
import java.net.ServerSocket;
import java.net.Socket;
import java.net.InetAddress;
import java.io.IOException;
import java.io.DataInputStream;
import java.io.DataOutputStream;
public class ServerTest implements Runnable
{
Thread thread;
public void run()
{
try
{
String str;
//创建服务器Socket并侦听端口8888
ServerSocket serverSocket=new ServerSocket (8888);
//接受客户端的连接
Socket socket=serverSocket.accept();
DataInputStream inStream=new DataInputStream(socket.getInputStream());
DataOutputStream outStream=new DataOutputStream (socket.getOutputStream());
InetAddress addr=socket.getInetAddress();
System.out.println("接收到来自 "+addr.getHostAddress()+" 的连接");
//发送响应信息
outStream.writeUTF("1");
while (true)
{
//接收客户端的信息
str=inStream.readUTF();
System.out.println("客户端信息: "+str);
str=String.valueOf(Integer.parseInt(str)+1);
//向客户端发送信息
outStream.writeUTF(str);
}
}
catch (IOException e)
{
System.out.println(e);
}
}
void start ()
{
thread=new Thread (this);
//线程开始
thread.start();
}
public static void main(String[] args)
{
ServerTest app=new ServerTest();
app.start();
}
客户端:
import java.net.Socket;
import java.net.InetAddress;
import java.io.DataOutputStream;
import java.io.DataInputStream;
import java.io.IOException;
public class ClientTest implements Runnable
{
Thread thread;
public void run()
{
Socket socket;
DataOutputStream outStream;
DataInputStream inStream;
try
{
//连接到本地机的8888端口
socket=new Socket("localhost",8888);
outStream=new DataOutputStream (socket.getOutputStream());
inStream=new DataInputStream (socket.getInputStream());
InetAddress addr=socket.getInetAddress();
System.out.println("连接到服务器 "+addr.getHostAddress());
while (true)
{
//从服务器读取数据
String str=inStream.readUTF();
System.out.println("服务器端信息: "+str);
thread.sleep(1000);
str=String.valueOf(Integer.parseInt(str)+1);
//向服务器发送数据
outStream.writeUTF(str);
}
}
catch (IOException e)
{
System.out.println(e);
}
catch (InterruptedException e)
{
System.out.println(e);
}
}
void start ()
{
thread=new Thread(this);
//打开线程
thread.start();
}
public static void main(String[] args)
{
ClientTest app=new ClientTest();
app.start();
}
flybirdlc
2006-06-01
打赏
举报
回复
就是 socket 和socketserver 写在一个程序里~
flybirdlc
2006-06-01
打赏
举报
回复
你写程序的时候要写一个 socket 还要写一个 socketserver
一个用来发,一个用来收。socketserver 写在循环里,让他永远不停的接收
然后socket 写在触发里
这样就可以了~
使用QEMU搭建Linux实验环境:从原理到实战的完整指南
虚拟化技术通过软件模拟硬件环境,为软件运行提供隔离的执行空间,其核心原理包括指令集模拟和硬件抽象。这项技术能显著提升资源利用率、增强系统安全性和部署灵活性,在云计算、嵌入式开发、软件测试和安全研究等领域有广泛应用。QEMU作为一款开源的机器模拟器和虚拟化器,凭借其全系统模拟能力,支持跨架构运行,成为搭建灵活Linux实验环境的理想工具。通过配置虚拟硬件、网络和存储,用户可以快速部署用于内核开发、嵌入式学习或安全测试的虚拟环境,有效利用热词如ARM架构模拟和虚拟磁盘管理来满足多样化需求。
Linux与BL31之间添加SMC实现随机数获取
Armv8架构中有四个异常等级EL0-EL3,两种安全状态即安全和非安全状态。SVC指令用于EL0下的用户应用程序请求EL1下的操作系统的服务,SMC指令允许普通世界中的程序请求EL3下的安全监控器的服务,这些都是同步异常指令,旨在不同异常等级下进行切换。本文中随机数应用在EL0下运行,处于非安全状态;Linux Kernel在EL1下运行,处于非安全状态;真随机数生成器服务在EL3下运行,处于安全状态。
在x86平台使用QEMU-KVM虚拟化部署ARM版统信UOS桌面系统
虚拟化技术是现代云计算和开发运维的基石,它通过软件模拟硬件环境,实现资源的隔离与高效利用。QEMU作为开源的机器模拟器,能够跨架构模拟多种CPU指令集,而KVM则利用宿主机的硬件虚拟化扩展,为虚拟机提供接近原生的性能。这种组合在软件兼容性测试、多架构开发环境中具有重要价值。特别是在当前国产化软硬件生态快速发展的背景下,开发者常需在x86平台上模拟ARM环境以适配飞腾等国产处理器。本文以QEMU-KVM为核心工具,详细演示了如何在Linux宿主机上创建ARMv8架构虚拟机,并成功安装统信UOS桌面版,为国产操
在Ubuntu虚拟机中使用QEMU搭建ARM64开发测试环境
虚拟化技术通过在物理硬件上创建隔离的软件环境,为开发测试提供了灵活且成本可控的解决方案。QEMU作为开源的机器模拟器,能够在x86架构的宿主机上完整模拟ARM64计算机系统,包括CPU、内存和外设。这种跨架构模拟的技术价值在于,它使得开发者无需购置昂贵的ARM硬件,即可进行ARM64软件的编译、测试和调试。在软件开发、嵌入式系统验证和环境复现等应用场景中,QEMU结合Ubuntu Cloud Image能够快速构建出可用的ARM64 Linux环境。本文聚焦于在Ubuntu虚拟机内,利用QEMU的用户模式和
用QEMU模拟苹果芯片,在x86 Linux上调试Darwin内核
操作系统内核调试一直门槛较高,尤其是苹果的Darwin/XNU内核,传统上依赖实体Mac或复杂黑苹果方案,普通开发者难以深入。虚拟化技术为内核研究提供了安全可复现的实验环境,QEMU作为开源全系统模拟器,凭借多架构支持和GDB调试协议,成为跨平台内核调试的重要工具。通过QEMU模拟Apple Silicon设备,可以在x86 Linux主机上引导Darwin内核,实现断点、单步、内存查看等完整的内核调试流程。darwin-vm项目正是利用这一思路,将启动iBoot、加载DeviceTree、提取kernel
Java SE
62,620
社区成员
307,251
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章