package socket;
import java.io.BufferedWriter;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
/**
* 聊天室客户端
* @author soft01
*
*/
public class Client {
/*
* java.net.Socket
* 封装了tcp协议的通讯细节,使得我们使用它就可以完成与远程计算机tcp连接以及数据
* 传输
* 并且,完成数据传输是基于两条流的读写进行
*
*/
private Socket socket;
/*
* 构造方法,用于初始化客户端
*/
public Client(){
try {
/*
* socket实例化时需要指定两个参数:
* 1.服务端的地址信息(IP)
* 2.服务端应用程序绑定的端口
*
* socket实例化的过程就是连接服务端的过程,成功连接则实例化成功,否则
* 实例化过程抛出异常
* 我们通过IP地址找到网络是那个的服务端所在计算机,通过端口找到该机器
* 上的服务端应用程序
*/
System.out.println("正在连接服务端");
socket=new Socket("176.30.9.169",8088);
System.out.println("已连接服务端!");
}catch(Exception e) {
e.printStackTrace();
}
}
//客户端开始工作方法
public void start() {
try {
/*
* OutputStream getOutputStream 通过socket获取字节输出流写出的字节
* 可以通过网络发送给远端计算机
*
*/
OutputStream out= socket.getOutputStream();
OutputStreamWriter osw=new OutputStreamWriter(out,"utf-8");
BufferedWriter bw=new BufferedWriter(osw);
PrintWriter pw=new PrintWriter(bw,true);
Scanner sc=new Scanner(System.in);
while(true) {
String s=sc.nextLine();
pw.println(s);
System.out.println("发送完毕");
}
}catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Client client=new Client();
client.start();
}
}
package socket;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 聊天室服务端
* @author soft01
*
*/
public class Server {
/*
* java.net.ServerSocket
* 运行在服务端的ServerSocket
* 主要有两个工作:
* 1.向系统申请服务端端口,客户端就是通过这个端口与服务端建立连接的
* 2.监听该端口,这样一旦一个客户端进行连接时,serverSocket会自动创建一个
* socket通过这个socket就可以与该客户端交互了
*
*/
private ServerSocket server;
public Server() {
try {
/*
* 实例化ServerSocket的同时需要向系统申请服务端口,客户端
* 就是通过这个端口与服务端建立连接的,如果该端口被系统的其他程序占用,会抛出异常
*
*/
System.out.println("正在启动服务端");
server=new ServerSocket(8088);
System.out.println("服务端启动完毕!");
}catch(Exception e) {
e.printStackTrace();
}
}
public void start() {
try {
/*
* Socket accept()
* 该方法是一个阻塞方法,调用后服务端开始等待客户端连接,直到
* 一个客户端连接为止,并且此时会返回一个socket实例,使用这个实例
* 即可与客户端进行交互
* 多次调用该方法可以接受多个客户端的连接
*
*/
System.out.println("等待客户端连接。。。");
Socket socket=server.accept();
System.out.println("一个客户端连接了! ");
/*
* InputStream getInputStream()
* 通过socket获取的输入流可以读取远端计算机发送来的字节
*
*/
InputStream in= socket.getInputStream();
InputStreamReader isr=new InputStreamReader(in,"utf-8");
BufferedReader br=new BufferedReader(isr);
while(true) {
String line=br.readLine();
System.out.println("客户端说:"+line);
}
}
catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Server server=new Server();
server.start();
}
}