【Java学习笔记】39:简易Socket编程(基于java.net下的Socket和ServerSocket)

本文提供了一个Java Socket通信的简单示例,包括服务器端和客户端的实现代码。该示例展示了如何使用DataInputStream和DataOutputStream进行信息的读写操作,并通过Socket建立连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注释部分是我不能通过的代码方式,留着以后研究。

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

//服务器端
public class Server {
	public static void main(String[] args) {

		try{
			//1.创建一个服务器端socket,指定绑定的端口并监听此端口
			ServerSocket ss = new ServerSocket(8888);
			//2.用accept方法等待用户连接,没有等到时程序运行至此处于阻塞状态
			System.out.println("监听中,等待客户端连接...");
			/*等到请求后accept()方法返回socket对象*/
			Socket socket=ss.accept();
			System.out.println("连接成功!");
			
			try {
				// 读取客户端传过来信息的DataInputStream  
                DataInputStream in = new DataInputStream(socket  
                        .getInputStream());  
                // 向客户端发送信息的DataOutputStream  
                DataOutputStream out = new DataOutputStream(socket  
                        .getOutputStream());  
                // 获取控制台输入的Scanner  
                Scanner scanner = new Scanner(System.in);  
                while (true) {  
                    // 读取来自客户端的信息  
                    String accpet = in.readUTF();  
                    System.out.println(accpet);  
                    String send = scanner.nextLine();  
                    System.out.println("服务器:" + send);  
                    // 把服务器端的输入发给客户端  
                    out.writeUTF("服务器:" + send);  
                }
				/***
					//接收客户端发来的消息所需的对象
					InputStream is=socket.getInputStream();//字节输入流
					InputStreamReader isr=new InputStreamReader(is);//包装为字符流
					BufferedReader br=new BufferedReader(isr);//为字符流添加缓冲
					
					//回消息给客户端所需的对象
					OutputStream os=socket.getOutputStream();//字节输出流
					PrintWriter pw=new PrintWriter(os);//将输出流包装为打印流
					
					//获取控制台输入的Scanner
	                Scanner scanner = new Scanner(System.in);
					
	                String sp;
	                
					while(true)
					{
						
						//从客户端读数据
						System.out.println("[From Client]:"+br.readLine());
						
						
						System.out.println("1");
						
						//向客户端输出
						sp=scanner.nextLine();
						pw.write(sp);
						pw.flush();
						System.out.println("[You Say]:"+sp);
					}
					***/
			} catch (Exception e){}
			finally{
				socket.close();
				ss.close();
			}
		}catch(Exception e){}

	}
}

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;
import java.util.Scanner;

//客户端
public class Client {
	public static void main(String[] args) {
		

		try {
			//创建客户端Socket,指定服务器地址和端口
			Socket socket = new Socket("localhost",8888);
			System.out.println("已经连接到服务器,端口8888!");
			try {
				// 读取服务器端传过来信息的DataInputStream  
                DataInputStream in = new DataInputStream(socket  
                        .getInputStream());  
                // 向服务器端发送信息的DataOutputStream  
                DataOutputStream out = new DataOutputStream(socket  
                        .getOutputStream());  
  
                // 装饰标准输入流,用于从控制台输入  
                Scanner scanner = new Scanner(System.in);  
  
                while (true) {  
                    String send = scanner.nextLine();  
                    System.out.println("客户端:" + send);  
                    // 把从控制台得到的信息传送给服务器  
                    out.writeUTF("客户端:" + send);  
                    // 读取来自服务器的信息  
                    String accpet = in.readUTF();  
                    System.out.println(accpet);  
                } 
				/***
				//向服务器端发送信息所需的对象
				OutputStream os=socket.getOutputStream();//字节输出流
				PrintWriter pw=new PrintWriter(os);//将输出流包装为打印流
				
				//接收服务器端回的消息所需的对象
				InputStream is=socket.getInputStream();//字节输入流
				InputStreamReader isr=new InputStreamReader(is);//包装为字符流
				BufferedReader br=new BufferedReader(isr);//为字符流添加缓冲
				
				//获取控制台输入的Scanner  
                Scanner scanner = new Scanner(System.in);
                String sp;
                
				while(true)
				{
					//向服务器输出
					sp=scanner.nextLine();
					pw.write(sp);
					pw.flush();
					System.out.println("[You Say]:"+sp);
					
					//从服务器读数据
					System.out.println("[From Server]:"+br.readLine());
				}
				***/
				
			}catch (Exception e){}
			finally{
				socket.close();
			}
		}catch(Exception e){}
		
	}
}

运行结果:

参考:socket

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值