TCP通信 ,Socket原理 ,服务端ServerSocket,客户端Socket

实例小项目为Chat聊天室。在com.sknomy.chat包下创建两个类,服务端Server,客户端Client。演示客户端怎样与服务端相连,并将用户输入的信息传递到服务端。

源代码:

服务端Server.java文件中的代码:

package com.sknomy.chat;

import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
/**
 * 聊天客户端
 * @author sknomy
 *
 */
public class Client {
	/*
	 * java.net.Socket
	 * 封装了TCP通讯的类。使用它就可以基于TCP协议进行网络通讯。
	 * 通讯的过程:
	 * 1.通过实例化Socket来连接服务端
	 * 2.建立连接后,可以通过Socket获取两个流
	 * 	输入流:用来读取服务端发送过来的数据
	 *  输出流:用来将数据发送给服务端。
	 */
	private Socket socket;
	/**
	 * 构造方法,用来初始化客户端
	 * @throws Exception
	 */
	public Client() throws Exception{
		try {
			/*
			 * 实例化Socket就是连接服务端的过程
			 */
			System.out.println("正在连接服务端...");
			socket = new Socket(
				"localhost",//远程计算机地址   localhost表示本机
				 8088		//服务端端口
			);
			System.out.println("服务端已连接");
		} catch (Exception e) {
			throw e;
		}
	}
	/**
	 * 客户端开始工作的方法
	 */
	public void start() throws Exception {
		try {
			/*
			 * 若想将数据发送至远端计算机(对于客户端这边而言,远端就是服务端),可以通过
			 * Socket获取输出流,将数据通过该流写出即可发送至服务端。
			 */
			OutputStream out = socket.getOutputStream();
			OutputStreamWriter osw = new OutputStreamWriter(out,"utf-8");
			PrintWriter pw = new PrintWriter(osw,true);
			Scanner scanner = new Scanner(System.in);
			String str = null;
			//向服务端发送消息,直到输入 exit程序退出
			System.out.println("请从键盘输入:");
			while(true) {
				str = scanner.nextLine();
				pw.println(str);
				if("exit".equals(str)) {
					break;
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		try {
			Client client = new Client();
			client.start();
		} catch (Exception e) {
			System.out.println("客户端启动失败!");
			e.printStackTrace();
		}
	}
}


客户端Client.java文件中的代码:

package com.sknomy.chat;
import java.io.OutputStream; 
import java.io.OutputStreamWriter; 
import java.io.PrintWriter; 
import java.net.Socket; 
import java.util.Scanner; 
/** 
* 聊天客户端 
* @author sknomy 
* 
*/ 
public class Client { 
    /* 
     * java.net.Socket 
     * 封装了TCP通讯的类。使用它就可以基于TCP协议进行网络通讯。 
     * 通讯的过程: 
     * 1.通过实例化Socket来连接服务端 
     * 2.建立连接后,可以通过Socket获取两个流 
     *     输入流:用来读取服务端发送过来的数据 
     *  输出流:用来将数据发送给服务端。 
     */ 
    private Socket socket; 
    /** 
     * 构造方法,用来初始化客户端 
     * @throws Exception 
     */ 
    public Client() throws Exception{ 
        try { 
            /* 
             * 实例化Socket就是连接服务端的过程 
             */ 
            System.out.println("正在连接服务端..."); 
            socket = new Socket( 
                "localhost",//远程计算机地址   localhost表示本机 
                 8088        //服务端端口 
            ); 
            System.out.println("服务端已连接"); 
        } catch (Exception e) { 
            throw e; 
        } 
    } 
    /** 
     * 客户端开始工作的方法 
     */ 
    public void start() throws Exception { 
        try { 
            /* 
             * 若想将数据发送至远端计算机(对于客户端这边而言,远端就是服务端),可以通过 
             * Socket获取输出流,将数据通过该流写出即可发送至服务端。 
             */ 
            OutputStream out = socket.getOutputStream(); 
            OutputStreamWriter osw = new OutputStreamWriter(out,"utf-8"); 
            PrintWriter pw = new PrintWriter(osw,true); 
            Scanner scanner = new Scanner(System.in); 
            String str = null; 
            //向服务端发送消息,直到输入 exit程序退出 
            System.out.println("请从键盘输入:"); 
            while(true) { 
                str = scanner.nextLine(); 
                pw.println(str); 
                if("exit".equals(str)) { 
                    break; 
                } 
            } 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
    } 
    
    public static void main(String[] args) { 
        try { 
            Client client = new Client(); 
            client.start(); 
        } catch (Exception e) { 
            System.out.println("客户端启动失败!"); 
            e.printStackTrace(); 
        } 
    } 
}


开启服务端的界面:


运行客户端连接服务端的界面:


演示客户端向服务端传递消息:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值