package com.socket;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
/**
*客户端类
*/
public class Client
{
public static void main(String[] args) throws IOException
{
// new Socket() 连接到指定的服务器端口,当前用的是本机的端口
Socket s = new Socket("localhost", 8888);
//返回s代表连接到了服务器
//s代表对服务器的连接
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();
out.write("连接服务器\n".getBytes("gbk"));
out.flush(); //清理缓冲,确保发送到服务端
Scanner sc = new Scanner(in);
String str = sc.nextLine();
System.out.println(str); //把从服务器返回的信息,打印到控制台。
out.flush();
}
}
package com.socket;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
/**
*服务器端类
*/
public class Server
{
public static void main(String[] args) throws IOException
{
Server server = new Server();
server.start();
}
public void start() throws IOException
{
//ServerSocket 对当前服务器的服务端口的绑定
//这个端口号不能重复绑定,不能同时执行两边
ServerSocket ss = new ServerSocket(8888);
while (true)
{
//accept 开始等待(IO Block)客户连接(启动监听),如果没有客户端连接,一直挂起等待下去。
//如果有客户端连接,才会继续执行下去,返回的Socket实例s 代表对于客户端连接。
Socket s = ss.accept();
//创建并启动客户服务线程,为客户服务
//当前线程再次返回到accept等待,下一个客户连接
new Service(s).start();//创建线程
}
}
class Service extends Thread
{
Socket s;
public Service(Socket s)
{
this.s = s;
}
public void run()
{
try
{
//s代表客户端
//s 中的in代表从客户传递过来的流
//s 中的out代表从服务器到客户端传输流
InputStream in = s.getInputStream();
Scanner sc = new Scanner(in);//System.in是操作系统后台
OutputStream out = s.getOutputStream();
//out.write("您好!您需要点啥?\n".getBytes("GBK"));
//out.flush();//清理缓冲,确保发送到客户端
while (true)
{
String str = sc.nextLine();//IO Block
if (str.equals("连接服务器"))
{
out.write("连接成功!\n".getBytes("GBK"));
out.flush();
break;
}
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}