Socket通信

来源:互联网 发布:mac优酷客户端 编辑:程序博客网 时间:2024/06/14 17:52

基于TCP的网络通信


1 .单个客户端和服务器的连接

服务器端代码

package com.cc.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.ServerSocket;import java.net.Socket;/** * 服务器端 * 基于TCP协议的网络通信实现用户登录 * @author Administrator * */public class Server {public static void main(String[] args) throws IOException {//1指定端口号ServerSocket  serverSocket   = new ServerSocket(8888);//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();  //对客户端进行响应  OutputStream os =   socket.getOutputStream();  PrintWriter  pw = new PrintWriter(os);  pw.write("欢迎您的到来~~~~~");  pw.flush();  //最后关闭流  socket.close(); }}
客户端代码
package com.cc.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;/** * 客户端 * @author Administrator * */public class Client {public static void main(String[] args) throws UnknownHostException, IOException {//创建客户端socket 并指定服务器地址和端口号Socket  socket  = new Socket("127.0.0.1", 8888);//获取输出流OutputStream  os = socket.getOutputStream();PrintWriter pw =  new PrintWriter(os);//包装成打印流pw.write("用户名:admin;密码:123");pw.flush();//刷新缓存//关闭流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);}socket.close();}}
2 多个客户端和一个服务器的通信

客户端

package com.cc.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.InetAddress;import java.net.ServerSocket;import java.net.Socket;/** * 服务器端 * 基于TCP协议的网络通信实现用户登录 * @author Administrator * */public class Server {public static void main(String[] args) throws IOException {//1指定端口号ServerSocket  serverSocket   = new ServerSocket(8888);//记录连接客户端的数量int count = 0 ;Socket  socket =null ;while(true){//2.accept等待客户端的连接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());}    }}
线程类

package com.cc.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;public class ServerThread  extends Thread{//与本线程相关的socketSocket  socket = null ;public ServerThread(Socket socket) {this.socket=socket ;}@Overridepublic void run() {try {//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();  //对客户端进行响应  OutputStream os =   socket.getOutputStream();  PrintWriter  pw = new PrintWriter(os);  pw.write("欢迎您的到来~~~~~");  pw.flush();} catch (IOException e) {e.printStackTrace();}finally {try {socket.close();} catch (IOException e) {e.printStackTrace();}}}}
客户端

package com.cc.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;/** * 客户端 * @author Administrator * */public class Client {public static void main(String[] args) throws UnknownHostException, IOException {//创建客户端socket 并指定服务器地址和端口号Socket  socket  = new Socket("127.0.0.1", 8888);//获取输出流OutputStream  os = socket.getOutputStream();PrintWriter pw =  new PrintWriter(os);//包装成打印流pw.write("用户名:paul;密码:123");pw.flush();//刷新缓存//关闭流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);}socket.close();}}