Java中的服务器与客户端的简单连接

     Java中重点之一就是服务器与客户端的连接,因为是在同一台PC上,所以就设置服务器的地址为“localhost”,注意,我当时试着设置其他名称,但都不行,这个原因还请老司机告一下。另外还要注意,服务端先于客户端运行,废话不多说,上代码了

    

package com.myinfo;

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;

public class Server {
	private static Socket accept;

	/**
	 * 服务器端的应用
	 * 
	 * @param args
	 */
	public static void main(String[] args) {

		try {
			// 1.创建Server服务器端的连接,并指定监听端口号
			ServerSocket server = new ServerSocket(8008);
			// 2.建立accept()连接
			System.out.println("服务器即将连接,等待客户端");
			Socket socket = server.accept();
			// 获取客户端输入流
			InputStream is = socket.getInputStream();
			// 转换成字符流
			InputStreamReader isr = new InputStreamReader(is);
			// 添加缓冲流
			BufferedReader br = new BufferedReader(isr);
		
			String data = null;
			while ((data = br.readLine()) != null) {
				// 循环读取
				System.out.println("我是服务器端,客户端说:" + data);
			}
              socket.shutdownInput();//关闭输入流
			//注意,此时应先关闭输入流之后才能获取输出流
			// 获取服务器端的输出流,响应客户端
			OutputStream os = socket.getOutputStream();
			PrintWriter pw = new PrintWriter(os); // 包装流
			pw.write("你好,客户端");
            pw.flush();
           
            
            
			// 关闭可关闭的资源
			os.close();
			pw.close();
			
			is.close();
			isr.close();
			br.close();
			server.close();

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

  接下来看客户端

package com.myinfo;

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 Client {

	/**
	 * 客户端
	 * 
	 * @param args
	 */

	public static void main(String[] args) {

		try {
			// 1.建立客户端,输入服务器的地址以及端口
			Socket socket = new Socket("localhost", 8008);
			// 获取输出流,向服务器打印信息
			OutputStream os = socket.getOutputStream();
			// 包装成打印流
			PrintWriter pw = new PrintWriter(os);
			pw.write("用户名:Admin 密码:ck");
			pw.flush();
			socket.shutdownOutput(); //关闭输出流
			//此时应该先关闭输出流然后在开启输入流
			// 获取客户端的输入流
			InputStream is = socket.getInputStream();
			// 转换成字符流
			InputStreamReader isr = new InputStreamReader(is);
			BufferedReader rd = new BufferedReader(isr); // 转换成缓冲流
			
			String data = null;
			while ((data = rd.readLine()) != null) {
				// 循环读取
				System.out.println("我是客户端,服务器端说:" + data);
			}

			// 关闭可关闭的资源
			rd.close();
			is.close();
			isr.close();
			pw.close();
			
			os.close();
			pw.close();

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

      小白一枚,不足之处,望请指正

posted @ 2016-11-03 10:21  无语的风  阅读(8361)  评论(0编辑  收藏  举报