Socket通信

基于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{
	//与本线程相关的socket
	Socket  socket = null ;
	public ServerThread(Socket socket) {
		this.socket=socket ;
	}
	
	@Override
	public 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();
}
}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值