java socket编程实战_Java Socket编程之TCP编程

Java Socket编程之TCP编程

TCP协议是面向连接的、可靠的、有序的、以字节流的方式发送数据,通过三次握手方式建立连接,形成传输数据的通道,在连接中进行大量数据的传输,效率会稍低

Java中基于TCP协议实现网络通信的类

客户端的Socket类

服务器端的ServerSocket类

24499e3c43543c8d4fde3e06bb7a99af.png

Socket通信的步骤

① 创建ServerSocket和Socket

② 打开连接到Socket的输入/输出流

③ 按照协议对Socket进行读/写操作

④ 关闭输入输出流、关闭Socket

服务器端:

① 创建ServerSocket对象,绑定监听端口

② 通过accept()方法监听客户端请求

③ 连接建立后,通过输入流读取客户端发送的请求信息

④ 通过输出流向客户端发送乡音信息

⑤ 关闭相关资源

**

/**

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

*/

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

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

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

Socket socket = serverSocket.accept();

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

InputStream is = socket.getInputStream();

InputStreamReader isr = new InputStreamReader(is);

BufferedReader br = new BufferedReader(isr);

String info = null;

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

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

}

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

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

OutputStream os = socket.getOutputStream();

PrintWriter pw = new PrintWriter(os);

pw.write("欢迎您!");

pw.flush();

//5、关闭资源

pw.close();

os.close();

br.close();

isr.close();

is.close();

socket.close();

serverSocket.close();

客户端:

① 创建Socket对象,指明需要连接的服务器的地址和端口号

② 连接建立后,通过输出流想服务器端发送请求信息

③ 通过输入流获取服务器响应的信息

④ 关闭响应资源

//客户端

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

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

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

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

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

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

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("我是客户端,服务器说:"+info);

}

//4、关闭资源

br.close();

is.close();

pw.close();

os.close();

socket.close();

应用多线程实现服务器与多客户端之间的通信

① 服务器端创建ServerSocket,循环调用accept()等待客户端连接

② 客户端创建一个socket并请求和服务器端连接

③ 服务器端接受苦读段请求,创建socket与该客户建立专线连接

④ 建立连接的两个socket在一个单独的线程上对话

⑤ 服务器端继续等待新的连接

//服务器线程处理

//和本线程相关的socket

Socket socket =null;

//

public serverThread(Socket socket){

this.socket = socket;

}

publicvoid run(){

//服务器处理代码

}

//============================================

//服务器代码

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);

}

[链接]()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值