JAVA Socket客户端疑问

NoOneQ 2017-10-14 06:03:09
刚入手Socket,有个问题请教下:是否客户端每发送一次消息,都要new一个Socket对象出来?详细描述如下:

通常客户端都是这么写的:

//创建socket
Socket socket = new Socket(ip,port)

//获取流来写数据
socket.getOutputStream()

一个客户端有"连接"按钮,有"发送"按钮。
我理解我只需要的"连接"按钮里面调用【创建socket】的代码来连接服务端,然后将socket对象保存起来
然后在"发送"按钮里面,取出socket对象,并调用【获取流来写数据】的代码来与服务端通信。

而实际上如果按上述方式来进行的话,服务端只能接受一次客户端的"发送"按钮所发送的消息。(服务端已经while(true)监了)
如果我将上述代码,即【创建socket】和【获取流来写数据】都放到"发送"按钮里面,服务器端是可以多次接收客户端的消息的

也就是说,客户端每发送一次消息,都要new Socket对象出来才行。是我理解的不对,还是确实就是这样?
...全文
63 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
NoOneQ 2017-10-15
  • 打赏
  • 举报
回复
在客户端中,我new Socket(ip,port) 一次,然后我用这new出来的一个socket对象,连续向服务端发送2次消息,2次中间线程睡眠3秒,然后发现第2次发送的消息,服务端监听不到。必须是2次发送消息都new Socket(ip,port),服务端才能收到2次消息。 这是为什么?
Ch01:俄罗斯方块游戏的实现 安装JDK,并正确配置环境变量(如果有疑问,可以参考任何一本java入门书籍)。打开Eclipse(可以到http://www.eclipse.org/现在官方最新版,Eclipse本身是免费软件),导入ch01下的java项目,然后保存、运行game.ErsBlocksGame类即可。 Ch02:俄罗斯方块双人对战的实现 安装JDK,并配置环境变量,打开Eclipse,导入java项目ch02,然后保存、运行game.ErsBlocksGame 类即可。 Ch03:五子棋对战游戏的实现 安装JDK、配置环境变量,打开Eclipse导入ch03项目,运行server.chessServer类启动服务器端,运行client.chessClient类启动客户端。目前只支持两个客户端进行网络对战,多个玩家还有如线程同步问题等。两个客户端可以在同一台电脑上运行。 Ch04:多媒体展示系统 –网络游鱼 安装JDK、配置环境变量,打开Eclipse导入ch04项目,运行server.FishServer类启动服务器端,运行java client.SwimFish类启动客户端。注意,同时在多台机上运行客户端才能显示出网络游鱼的效果,在同一台机上打开多个客户端窗口不能看到该效果。 Ch05:野人与传教士过河问题的实现 安装JDK、配置环境变量,打开Eclipse导入ch05项目,运行主类crossriver.CrossRiver即可启动演示程序。 Ch06:人机对战五子棋游戏的实现 安装JDK,配置环境变量,双击compile.bat 批处理文件编译项目,双击runFive.bat批处理文件可启动项目。 Ch07:蚁群算法的模拟实现 安装JDK,配置环境变量,导入ch07项目,一般情况下直接保存、运行ant.UI即可启动程序。如果不能运行,将ch07文件夹下的swt.jar加入构建路径,然后在运行中的JVM参数中加入-Djava.library.path="dll所在目录的绝对路径"即可。 也可以在命令行下直接运行该程序,假设ch07文件夹放在D盘跟目录。则在cmd下切换到ch07文件夹下,运行如下命令即可启动程序: java -cp D:\ch07\swt.jar;.; -Djava.library.path=D:\ch07 ant.UI ch08:SchoolEbay的实现 安装JDK,配置环境变量,安装ant和tomcat,并配置相应环境变量,不清楚的读者可以参见其文档。安装SQL Server 2000或更高版本,注意SQL Server 2000必须打sp3补丁,否则无法监听端口,客户端不能连接。 然后SchoolEbay\database目录下的数据库文件附加到Sql Server,具体操作是打开企业管理器,在左边的树状列表中右击数据库,在弹出的快捷菜单中选择“所有任务”|“附加数据库”命令,再选择要附加的数据库文件即可。 打开控制台(运行中输入cmd),将目录转到SchoolEbay所在目录,输入ant命令来编译打包程序(编译前请修改datasource下的Constants.java文件,将其中的username和passoword修改为SQL Server的用户名和密码)。将生成的SchoolEbay.war添加到Tomcat的webapps目录下,并启动Tomcat、启动Sql Server。访问http://localhost:8080/SchoolEbay/index.jsp,可启动本项目。 Ch09:Ajax技术在网上教学平台的应用 安装JDK,配置环境变量,安装Tomcat、SQL Server并进行相应配置。创建数据库Ajax,然后使用sql目录下的ajaxbak文件还原数据库。为Eclipse安装MyEclipse插件。使用Eclipse导入项目ch09, 在src/config.properties中配置数据库连接信息, 然后部署项目、启动tomcat。 访问http://localhost:8080/ajax即可启动本程序。 Ch10:一个简单的编译器实现 安装JDK、配置环境变量,启动Eclipse并导入ch10项目,运行主类calculator.Calculator即可。 Ch11:基于RMI分布计算实例 安装JDK、配置环境变量,编译java源文件(可以用eclipse自动编译也可以手动命令行下编译),然后命令行下运行如下命令启动服务器端: java rmi.NetS 2000 (端口号为2000)

51,410

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧