会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132413个问题

老师,我的程序照着老师的敲的,但是我的程序有些问题,就是服务器端启动了以后,“收到了”这个数据没有发送过去,下面是我的程序的代码和运行结果


服务器端程序:

package cn.sxt.server85;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
 * 服务器端的应用程序
 * @author Mr_xi
 *
 */
public class Test {
	public static void main(String[] args) throws IOException {
		System.out.println("--------------服务器端已启动---------------------");
		//1.创建ServerSocket对象
		ServerSocket server = new ServerSocket(9999);
		//2.监听是否有客户端来请求连接
		Socket client = server.accept();
		//3.获取输入流
		InputStream is = client.getInputStream();
		System.out.println((char)is.read());
		//4.获取输出流
		OutputStream os = client.getOutputStream();
		os.write("收到了!".getBytes());
		//5.关闭流,关闭Socket
		if(os!=null) {
			os.close();
		}
		
		if(is!=null) {
			is.close();
		}
		
		if(client!=null) {
			client.close();
		}
		
	}
}


客户端程序:

package cn.sxt.client85;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

/**
 * 客户端程序
 * @author Mr_xi
 *
 */
public class Test {
	public static void main(String[] args) throws IOException {
		System.out.println("----------------客户端启动了------------------");
		//1.创建Socket对象
		Socket client = new Socket("127.0.0.1",9999);
		//2.获取输出流
		OutputStream os = client.getOutputStream();
		os.write('a');
		//3.获取输入流
		InputStream is = client.getInputStream();
		byte[] buf = new byte[1024];//中转站
		int len=0;//读到的字节个数
		while((len=is.read())!=-1) {
			System.out.println(new String(buf,0,len));
		}
		//4.关闭流
		if(os!=null){
			os.close();
		}
		if(is!=null) {
			is.close();
		}
		if(client!=null) {
			client.close();
		}
		
	}
}


运行的结果是:

blob.pngblob.png


blob.png










JAVA 全系列/第二阶段:JAVA 基础深化和提高/网络编程(旧) 3227楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/手写服务器项目(旧) 3232楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/数据结构 3235楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/IO 流技术(旧) 3237楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器(旧) 3238楼

客户端:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class MutualChatSocketClient {
    public static void main(String[] args) {
        try (Socket socket = new Socket("127.0.0.1",8888);
             Scanner scanner = new Scanner(System.in);
             BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
             PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
             )
        {

            System.out.println("与服务端连接成功!");

            while (true){
                //这里一定要注意顺序:客户端先发送消息,再接收服务端的消息

                //向服务端发送消息
                String clientInput = scanner.nextLine();
                pw.println(clientInput);
                pw.flush();

                //接收服务端的消息
                System.out.println("服务端说:"+br.readLine());

                //服务端想要结束对话
                if ("exit".equals(br.readLine())){
                    break;
                }

            }
        }catch (Exception e){
            e.printStackTrace();
            System.out.println("客户端启动失败");
        }
    }
}

服务端:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class MutualChatSocketServer {
    public static void main(String[] args) {
        System.out.println("服务端启动,监听端口号为8888!");
        try (ServerSocket serverSocket = new ServerSocket(8888);
             Socket socket = serverSocket.accept();
             Scanner scanner = new Scanner(System.in);
             BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
             PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
             ){

            System.out.println("与客户端连接成功!");

            while (true){
                //这里一定要注意顺序:服务端先接收客户端的消息,再发送消息

                //接收客户端的消息
                System.out.println("客户端说:"+br.readLine());

                //客户端想要结束对话
                if ("exit".equals(br.readLine())){
                    break;
                }

                //向客户端发送消息
                String serverInput = scanner.nextLine();
                pw.println(serverInput);
                pw.flush();
            }

        }catch(Exception e){
            e.printStackTrace();
            System.out.println("服务端启动失败");
        }
    }
}

130dc8483bdfb12b2d23d3fe3998891.png8b9c09435163ad0478ab6af36e6a59f.png老师您好,我遇到的问题是,客户端向服务端发送消息后,服务端可以收到,但是服务端向客户端发送消息后,客户端却收不到。问题定位到了是循环体中的if语句,我把if语句都注释掉就可以了,请问老师这里的if语句为什么会影响客户端接收服务端口的消息呢,if的条件不满足的话不是直接就跳过了吗?应该不受影响的啊

JAVA 全系列/第二阶段:JAVA 基础深化和提高/网络编程 3240楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637