Java 之Socket通信(二)
来源:互联网 发布:淘宝退换货说明 编辑:程序博客网 时间:2024/05/18 06:36
TCP协议是面向连接的、可靠的、有序的,以字节流方式发送数据的。
步骤实现:
1创建ServerSocket和Socket
2.代开链接到的Socket的输入/输出流
3.按照协议对Socket进行读写操作
4.关闭输入输出流,关闭Socket
基于TCP协议的Socket通信需要的是客户端和服务器端的相互的通信,所以服务器端应该建立ServerSkocket;
服务器端的实现过程如下:
1.创建ServerSocket对象,绑定监听端口
2.通过accept()方法监听客户端的请求
3.连接建立后,通过输入流读取客户端发送的请求信息
4.同过输出流向客户端发送响应信息
5.关闭相关资源
import java.io.IOException;import java.net.InetAddress;import java.net.ServerSocket;import java.net.Socket;//基于TCP协议的Socket通信 public class SeverTest { public static void main(String[] args){ //创建一个服务器端的Socket,即ServerSocket指定绑定的 //端口 try { ServerSocket serverSocket = new ServerSocket(8888); Socket socket=null; //记录客户端数量 int count=0; //2.调用accept()方法开始监听,等待客户端连接 System.out.println("****服务器即将启动****"); while(true){ socket=serverSocket.accept(); //通过当前线程,实现 ServerThread serverthread = new ServerThread(socket); //启动线程 serverthread.start(); count++; System.out.println("当前客户端数量:"+count); InetAddress address = socket.getInetAddress(); System.out.println("当前客户端的IP:"+address.getHostAddress()); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
为了能够实现多个客户同时访问服务端,结合多线程来进行设计:
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import java.net.Socket;public class ServerThread extends Thread { Socket socket = null; public ServerThread(Socket socket){ this.socket=socket; } //线程执行的操作,响应客户端的请求 public void run(){ InputStream is = null; InputStreamReader isr = null; BufferedReader br = null; OutputStream os = null; PrintWriter pw = null; try { //3.获取一个输入流,用来读取客户端锁发送的登陆信息 is = socket.getInputStream(); //将字节输入流包装成字节输入流 isr = new InputStreamReader(is); //添加缓冲 br = new BufferedReader(isr); String info = null; while((info=br.readLine())!=null){ System.out.println("我是服务器,服务器说:"+info); } //关闭输入流 socket.shutdownInput(); os = socket.getOutputStream(); pw = new PrintWriter(os); pw.write("欢迎您!"); pw.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(pw!=null) pw.close(); if(os!=null) try { os.close(); } catch (IOException e3) { // TODO Auto-generated catch block e3.printStackTrace(); } if(br!=null) try { br.close(); } catch (IOException e3) { // TODO Auto-generated catch block e3.printStackTrace(); } if(isr!=null) try { isr.close(); } catch (IOException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } if(is!=null) try { is.close(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } if(socket!=null) try { socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static void main(String[] args) { // TODO Auto-generated method stub }}
客户端的设计:
package com.imooc.test;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;public class ClientTest { public static void main(String[] args){ //创建客户端的Socket,指定服务器的地址和端口号 try { Socket socket = new Socket("localhost",8888); //获取输出流,向服务器端发送消息 OutputStream os = socket.getOutputStream(); PrintWriter pw = new PrintWriter(os); pw.write("用户名:admin;密码:123"); pw.flush(); //关闭socket的资源 socket.shutdownOutput(); InputStream is = socket.getInputStream(); BufferedReader br = new BufferedReader( new InputStreamReader(is)); String info = null; while((info=br.readLine())!=null){ System.out.println("我是客户端,服务器说:"+info); } br.close(); is.close(); pw.close(); os.close(); socket.close(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
启动服务器端控制台结果为:
客户端启动控制台输出结果为:
这里是服务器端做出的响应
服务器端做出了反映:
验证得到客户端发送的数据已经到达服务器端。这样就实现了基于Socket的TCP协议的通信过程。
阅读全文
0 0
- Java 之Socket通信(二)
- java Socket通信(二)
- Java Socket 通信 (二)
- Java网络编程之Socket通信(二)
- Java Socket实战之二 多线程通信
- Java Socket实战之二 多线程通信
- Java Socket实战之二 多线程通信 .
- Java Socket实战之二 多线程通信
- Java Socket实战之二 多线程通信
- Java Socket实战之二:多线程通信
- Java Socket实战之二 多线程通信
- Java Socket实战之二 多线程通信
- Java Socket实战之二 多线程通信
- Java Socket实战之二 多线程通信
- Java Socket实战之二:多线程通信
- Java Socket实战之二 多线程通信
- Java Socket实战之二 多线程通信
- Java Socket实战之二 多线程通信
- awk函数介绍
- Mysql 性能分析
- 基于MeanShift的目标跟踪算法及实现
- 归往昔
- Struts2_防止表单重复提交
- Java 之Socket通信(二)
- highchart的几种数据组织形式
- 十大Intellij IDEA快捷键
- Java集合框架详解(二)——Collection源码分析
- fedora25 26系统 SecureCRT SecureFX 注册破解方法
- Sigma Function (找规律?)
- 欢迎使用CSDN-markdown编辑器
- PermGen space错误解决方法
- Visual Box 的 Host-only 连接