java socket 编程学习笔记



1. Socket 通信简介及模型

  Java Socket 可实现客户端--服务器间的双向实时通信。java.net包中定义的两个类socket和ServerSocket,分别用来实现双向连接的client和server端。

 

2. Socket 通信实现方法

  2.1  服务器端(非多线程)   

/** 

 * 基于TCP协议的Socket通信,实现用户登录,服务端 

*/

//1、创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口 

ServerSocket serverSocket =newServerSocket(10086);//1024-65535的某个端口 

//2、调用accept()方法开始监听,等待客户端的连接 

Socket socket = serverSocket.accept(); 

//3、获取输入流,并读取客户端信息 

InputStream is = socket.getInputStream(); 

InputStreamReader isr =newInputStreamReader(is); 

BufferedReader br =newBufferedReader(isr); 

String info =null; 

while((info=br.readLine())!=null){ 

System.out.println("Hello,我是服务器,客户端说:"+info); 

} 

socket.shutdownInput();//关闭输入流 

//4、获取输出流,响应客户端的请求 

OutputStream os = socket.getOutputStream(); 

PrintWriter pw = new PrintWriter(os); 

pw.write("Hello World!"); 

pw.flush(); 

  

 

//5、关闭资源 

pw.close(); 

os.close(); 

br.close(); 

isr.close(); 

is.close(); 

socket.close(); 

serverSocket.close(); 

 

  2.2  客户端

 

//客户端 

//1、创建客户端Socket,指定服务器地址和端口 

Socket socket =newSocket("127.0.0.1",10086); 

//2、获取输出流,向服务器端发送信息 

OutputStream os = socket.getOutputStream();//字节输出流 

PrintWriter pw =newPrintWriter(os);//将输出流包装成打印流 

pw.write("用户名:admin;密码:admin"); 

pw.flush(); 

socket.shutdownOutput(); 

//3、获取输入流,并读取服务器端的响应信息 

InputStream is = socket.getInputStream(); 

BufferedReader br = new BufferedReader(new InputStreamReader(is)); 

String info = null; 

while((info=br.readLine())!null){ 

 System.out.println("Hello,我是客户端,服务器说:"+info); 

} 

  

//4、关闭资源 

br.close(); 

is.close(); 

pw.close(); 

os.close(); 

socket.close(); 

 2.2 服务器端 (多线程)

 

 

 

 

  1. 服务器端创建ServerSocket,循环调用accept()等待客户端连接
  2. 客户端创建一个socket并请求和服务器端连接
  3. 服务器端接受客户端请求,创建socket与该客户建立专线连接
  4. 建立连接的两个socket在一个单独的线程上对话
  5. 服务器端继续等待新的连接

 

 

//服务器线程处理 和本线程相关的socket 

Socket socket =null; 

public serverThread(Socket socket){ 

this.socket = socket; 

} 

ServerSocket serverSocket =newServerSocket(10086); 

Socket socket =null; 

int count =0;//记录客户端的数量 

while(true){ 

socket = serverScoket.accept(); 

ServerThread serverThread =newServerThread(socket); 

 serverThread.start(); 

 count++; 

System.out.println("客户端连接的数量:"+count); 

} 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值