socket服务端可以接受消息但是无法返回的问题

问题描述

这是服务端代码package com.hj.demo.socket;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class Server {public Server() throws IOException {ServerSocket ss = new ServerSocket(7777);while (true) {Socket sk = ss.accept();ClientThread ct = new ClientThread(sk);ct.start();System.out.println("服务端已启动...");}}// 多线程客户端class ClientThread extends Thread {private Socket clientSocket = null;public ClientThread(Socket clientSocket) {this.clientSocket = clientSocket;}DataInputStream dis = new DataInputStream(null);@SuppressWarnings("deprecation")@Overridepublic void run() {// TODO Auto-generated method stubString hostName = clientSocket.getInetAddress().toString();System.out.println("hostName:>" + hostName+"已连接");String msg = null;try {dis = new DataInputStream(clientSocket.getInputStream());while (true) {msg = dis.readUTF();System.out.println(hostName + "发来的消息>: " + msg);if(null==dis.readLine()||"".equals(dis.readLine())){break;}}if(!"".equals(msg)&&msg.length()!=0){DataOutputStream dos = new DataOutputStream(clientSocket.getOutputStream());String rep = "我是返回给由"+hostName+"发来["+msg+"]的消息";System.out.println(rep);dos.writeUTF(rep);dos.close();}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}super.run();}}public static void main(String[] args) throws IOException {new Server();}}这是客户端的代码package com.hj.demo.socket;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.Socket;import java.net.UnknownHostException;public class Client {public static void main(String[] args) throws UnknownHostException,IOException, InterruptedException {Socket sk = new Socket("127.0.0.1", 7777);DataOutputStream dos = new DataOutputStream(sk.getOutputStream());DataInputStream dis = new DataInputStream(sk.getInputStream());dos.writeUTF("hello,world");String rep = dis.readUTF();System.out.println("主机返回的消息>: " + rep);dos.close();dis.close();}}服务端可以接收发来的消息,但是返回就不行,求解答! 问题补充:苹果超人 写道

解决方案

if(!"".equals(msg)&&msg.length()!=0){ DataOutputStream dos = new DataOutputStream(clientSocket.getOutputStream()); String rep = "我是返回给由"+hostName+"发来["+msg+"]的消息"; System.out.println(rep); dos.writeUTF(rep); [color=red]dos.flush(); [/color] dos.close(); } 这边要调用一下flush方法,刷新一下,让服务器端把数据发送出去。
解决方案二:
DataInputStream dis = new DataInputStream(sk.getInputStream()); dos.writeUTF("hello,world"); 后要加上一句dos.writeUTF("");应该就可以了
解决方案三:
while (true) { msg = dis.readUTF(); System.out.println(hostName + "发来的消息>: " + msg); if(null==dis.readLine()||"".equals(dis.readLine())){ break; } } 你用的是readline来结束客户端的输出,但是看你客户端好像没有写入换行符。
解决方案四:
你写完数据时,都要flush一下IO通道的,这样才不会堵塞,呵呵,结贴吧。
解决方案五:
看到楼上的回复,看了下客户端的代码,在writeUTF之后,要flush一下,刷新下IO通道。
解决方案六:
Server端线程应该无法退出的while (true) { msg = dis.readUTF(); System.out.println(hostName + "发来的消息>: " + msg); if(null==dis.readLine()||"".equals(dis.readLine())){ break; } } 这段代码的意思是当读到内容后,打印出来,但是仅当读到的内容为空的时候才退出线程,否则一直阻塞在msg=dis.readUTF这儿。要想退出线程的话,可以和客户端约定一个特殊字符串,如bye,当客户端想要断开连接的时候,发送bye到服务端,而后服务端退出线程即可。当然不能忘了释放资源。

时间: 2024-12-11 12:25:06

socket服务端可以接受消息但是无法返回的问题的相关文章

socket服务端向客户端发送字节数组消息时客户端无法接收问题

问题描述 socket服务端向客户端发送字节数组消息时客户端无法接收问题

socket 客户端怎样在规定的时间内没有接收到服务端传来的消息连接自动关闭

问题描述 如题:socket客户端如果在规定的时间内没有接收到服务端传来的消息连接自动关闭例如:时间是2分钟应该怎样设置两分钟后关闭和服务端的连接! 解决方案 解决方案二:楼主,其实你考虑的问题Socket本省已经实现了:Socket.setSoTimeout(inttimeout):设置Socket的连接的超时值,指定的以毫秒为单位的超时值.希望楼主多看API,会有意想不到的惊喜哦!解决方案三:代码:Socketsocket=null;try{socket=newSocket(InetAddr

解析php做推送服务端实现ios消息推送

本篇文章是对php做推送服务端实现ios消息推送的方法进行了详细的分析介绍,需要的朋友参考下   准备工作1.获取手机注册应用的deviceToken(iphone手机注册应用时返回唯一值deviceToken) 2.获取ck.pem文件(做手机端的给) 3.获取pass phrase(做手机端的给) testpush.php文件 复制代码 代码如下: <?php //手机注册应用返回唯一的deviceToken $deviceToken = '6ad7b13f b05e6137 a46a60e

java ocket 反向-java Socket服务端反向查数据

问题描述 java Socket服务端反向查数据 需求是 两个java web项目,用socket实现数据即时查询 client向server注册,并保持连接 server向client发送请求,client返回数据. 我现在不知道怎么用ServerSocket向Socket对象发送请求,并且能得到回复. 帮我考虑一下,多谢. 解决方案 http://bbs.51cto.com/thread-1084435-1.html 一个简单的Demo 解决方案二: 看一下例子就行了http://blog.

scoket tcp ip 报文-Java 的 Socket服务端客户端以tcp/ip协议发送接收报文

问题描述 Java 的 Socket服务端客户端以tcp/ip协议发送接收报文 代码谁有模板,比如给你一个login报文,logout报文!!急急急!!! 解决方案 Android Socket 编程(WIFI 和 ADB) 有了发送数据的功能,再发送文件还需要分包等协议. 解决方案二: 这个不知道是不是你要的答案, 解决方案三: http://blog.csdn.net/u013301192/article/details/46336719 解决方案四: 网页上的1楼回复应该对你有用,祝你好运

java-JAVA Socket服务端 的到socket的连接数

问题描述 JAVA Socket服务端 的到socket的连接数 RT:怎么获取 多少个客户端连接我的服务端,求大神指教!!! 解决方案 可以用一个变量计数,没有一个客户端连接就加1. 解决方案二: 应该是服务端在接到连接的时候用一个链表把链接存储起来,然后遍历链表得到数量. 解决方案三: 创建一个连接就存到hash表里,断开连接就从hash表里删除,获取hash表的大小就是连接数 解决方案四: 做一个计数器,增加连接+1,断开连接-1 解决方案五: java Socket服务端3.java s

Android Socket服务端与客户端用字符串的方式互相传递图片的方法_Android

发送图片: 首先找到具体传递的图片: <span style="font-family: comic sans ms,sans-serif; font-size: 16px;">private Bitmap getimage(String srcPath) { BitmapFactory.Options newOpts = new BitmapFactory.Options(); // 开始读入图片,此时把options.inJustDecodeBounds 设回true了

多个socket服务端,一个socket客户端在调用其中一个不通时,如何有选择的调用其它几个

问题描述 socket服务端:server1,server2,server3,server4socket客户端:client1,client2,client3,client41.client1先调server1不通,进而试着调用server2,server2不通就调server3,server3不通就调用server42.client2先调server2不通,进而试着调用server1,server1不通就调server3,server3不通就调用server43.client3先调server

请教SOCKET 服务端代码

问题描述 //监听函数publicvoidListen(){//初始化SOCKET实例newsock=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);//初始化终结点实例localEP=newIPEndPoint(IPAddress.Any,setPort);try{//绑定newsock.Bind(localEP);//监听newsock.Listen(10);//用于设置按钮状态m_Listen