
版本一 创建简单的连接
服务器端
package cn.hanquan.tcp;
import java.io.DataInputStream;
import java.io.IOException;
import .ServerSocket;
import .Socket;
/*
* 创建服务器
* 1、指定端口 使用ServerSocket创建服务器
* 2、阻塞式等待链接 accept
* 3、操作:输入输出操作
* 4、释放资源
*/
public class Server {
public static void main(String[] args) throws IOException {
System.out.println("------Server------");
// 1、指定端口 使用ServerSocket创建服务器
ServerSocket server = new ServerSocket(8888);
// 2、阻塞式等待链接 accept
Socket client = server.accept();
System.out.println("一个客户端建立了链接");
// 3、操作:输入输出操作
DataInputStream dis = new DataInputStream(client.getInputStream());
String data = dis.readUTF();
System.out.println(data);
// 4、释放资源
dis.close();
client.close();
}
}客户端
package cn.hanquan.tcp;
import java.io.DataOutputStream;
import java.io.IOException;
import .Socket;
import .UnknownHostException;
/*
* 创建客户端
* 1、建立链接:使用Socket创建客户端+指定服务器的地址和端口
* 2、操作:输入输出流操作
* 3、释放资源
*/
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException {
System.out.println("------Client------");
// 1、建立链接:使用Socket创建客户端+指定服务器的地址和端口
Socket client = new Socket("localhost", 8888);
// 2、操作:输入输出流操作
DataOutputStream dos = new DataOutputStream(client.getOutputStream());
String data = "hello";
dos.writeUTF(data);
dos.flush();
// 3、释放资源
dos.close();
client.close();
}
}运行结果

版本二:输入用户名、密码
server
package cn.hanquan.tcp;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import .ServerSocket;
import .Socket;
/*
* 创建服务器
* 1、指定端口 使用ServerSocket创建服务器
* 2、阻塞式等待链接 accept
* 3、操作:输入输出操作
* 4、释放资源
*/
public class Server {
public static void main(String[] args) throws IOException {
String name = "root";
String pwd = "123";
System.out.println("------Server------");
// 1、指定端口 使用ServerSocket创建服务器
ServerSocket server = new ServerSocket(8888);
// 2、阻塞式等待链接 accept
Socket client = server.accept();
System.out.println("一个客户端建立了链接");
// 3、操作:输入输出操作
DataInputStream dis = new DataInputStream(client.getInputStream());
String datas = dis.readUTF();
// 分析
String[] dataArray = datas.split(" ");
System.out.println("你输入的用户名为:" + dataArray[0]);
System.out.println("你输入的用户名为:" + dataArray[1]);
String uname = dataArray[0];
String upwd = dataArray[1];
//发送结果
DataOutputStream dos = new DataOutputStream(client.getOutputStream());
if(uname.equals(name)&&upwd.contentEquals(pwd)) {//yes
dos.writeUTF("登录成功");
}else {//no
dos.writeUTF("用户名或密码错误");
}
// 4、释放资源
dis.close();
client.close();
}
}client
package cn.hanquan.tcp;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import .Socket;
import .UnknownHostException;
/*
* 创建客户端
* 1、建立链接:使用Socket创建客户端+指定服务器的地址和端口
* 2、操作:输入输出流操作
* 3、释放资源
*/
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException {
System.out.println("------Client------");
BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入用户名:");
String uname = console.readLine();
System.out.println("请输入密码:");
String upwd = console.readLine();
// 1、建立链接:使用Socket创建客户端+指定服务器的地址和端口
Socket client = new Socket("localhost", 8888);
// 2、操作:输入输出流操作
DataOutputStream dos = new DataOutputStream(client.getOutputStream());
dos.writeUTF(uname + " " + upwd);
dos.flush();
// 接收结果
DataInputStream dis = new DataInputStream(client.getInputStream());
String datas = dis.readUTF();
System.out.println(datas);
// 3、释放资源
dos.close();
client.close();
}
}
版本三:文件上传
server
package cn.hanquan.tcp;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import .ServerSocket;
import .Socket;
/*
* 文件接收 大小无限制
*/
public class Server {
public static void main(String[] args) throws IOException {
System.out.println("------Server------");
// 1、指定端口 使用ServerSocket创建服务器
ServerSocket server = new ServerSocket(8888);
// 2、阻塞式等待链接 accept
Socket client = server.accept();
System.out.println("一个客户端建立了链接");
// 3、操作:文件存储
InputStream is = new BufferedInputStream(new FileInputStream("头像.jpg"));
OutputStream os = new BufferedOutputStream(new FileOutputStream("tcp.jpg"));
byte[] flush = new byte[1024];
int len = -1;
while ((len = is.read(flush)) != -1) {
os.write(flush, 0, len);
}
os.flush();
// 4、释放资源
is.close();
os.close();
client.close();
}
}client
package cn.hanquan.tcp;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import .Socket;
import .UnknownHostException;
/*
* 文件上传 大小无限制
*/
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException {
System.out.println("------Client------");
// 1、建立链接:使用Socket创建客户端+指定服务器的地址和端口
Socket client = new Socket("localhost", 8888);
// 2、操作:文件上传
InputStream is=new BufferedInputStream(new FileInputStream("头像.jpg"));
OutputStream os=new BufferedOutputStream(client.getOutputStream());
byte[]flush=new byte[1024];
int len=-1;
while((len=is.read(flush))!=-1) {
os.write(flush,0,len);
}
os.flush();
// 3、释放资源
os.close();
is.close();
client.close();
}
}
版本四:多用户登录
服务端
(1)封装之前的服务端
package cn.hanquan.tcp;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import .ServerSocket;
import .Socket;
/*
* 服务器 多用户登录
*/
public class LoginMultiServer {
public static void main(String[] args) throws IOException {
System.out.println("------Server------");
// 1、指定端口 使用ServerSocket创建服务器
ServerSocket server = new ServerSocket(8888);
boolean status = true;
while (status) {
// 2、阻塞式等待链接 accept
Socket client = server.accept();
System.out.println("一个客户端建立了链接");
new Thread(new Channel(client)).start();// 成功连接,就开启一个线程检测登录
}
}
}
class Channel implements Runnable {
Socket client;
public Channel(Socket client) {
this.client = client;
}
@Override
// 3、操作:输入输出操作
public void run() {
DataInputStream dis = null;
String datas = null;
try {
dis = new DataInputStream(client.getInputStream());
datas = dis.readUTF();
// 分析
String[] dataArray = datas.split(" ");
System.out.println("你输入的用户名为:" + dataArray[0]);
System.out.println("你输入的用户名为:" + dataArray[1]);
String uname = dataArray[0];
String upwd = dataArray[1];
// 发送结果
DataOutputStream dos = new DataOutputStream(client.getOutputStream());
if (uname.equals("root") && upwd.contentEquals("123")) {
dos.writeUTF("登录成功");
} else {
dos.writeUTF("用户名或密码错误");
}
// 4、释放资源
dis.close();
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}(2)封装之后的服务端
package cn.hanquan.tcp;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import .ServerSocket;
import .Socket;
/*
* 服务器 多用户登录
*/
public class LoginMultiServer {
public static void main(String[] args) throws IOException {
System.out.println("------Server------");
// 1、指定端口 创建服务器
ServerSocket server = new ServerSocket(8888);
boolean status = true;
while (status) {
// 2、阻塞式等待链接
Socket client = server.accept();
System.out.println("一个客户端建立了链接");
//每建立一个连接就 new 一个线程
new Thread(new Channel(client)).start();
}
}
}
class Channel implements Runnable {
Socket client;
// 构造器
public Channel(Socket client) {
this.client = client;
}
@Override
public void run() {
String datas = receive();
boolean successLogIn = check(datas);
send(successLogIn);
}
// 接收客户端数据
public String receive() {
DataInputStream dis = null;
String datas = null;
try {
dis = new DataInputStream(client.getInputStream());
datas = dis.readUTF();
} catch (IOException e) {
e.printStackTrace();
}
return datas;
}
// 检测登录是否成功
public boolean check(String datas) {
try {
// 分析
String[] dataArray = datas.split(" ");
System.out.println("你输入的用户名为:" + dataArray[0]);
System.out.println("你输入的用户名为:" + dataArray[1]);
String uname = dataArray[0];
String upwd = dataArray[1];
// 发送结果
if (uname.equals("root") && upwd.contentEquals("123")) {
return true;
} else {
return false;
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
public void send(boolean flag) {
try {
DataOutputStream dos = new DataOutputStream(client.getOutputStream());
if (flag)
dos.writeUTF("登录成功");
else
dos.writeUTF("用户名或密码错误");
} catch (IOException e) {
e.printStackTrace();
}
}
}客户端
package cn.hanquan.tcp;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import .Socket;
import .UnknownHostException;
/*
* 客户端
*/
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException {
System.out.println("------Client------");
BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入用户名:");
String uname = console.readLine();
System.out.println("请输入密码:");
String upwd = console.readLine();
// 1、建立链接:使用Socket创建客户端+指定服务器的地址和端口
Socket client = new Socket("localhost", 8888);
// 2、操作:将用户名和密码传输到服务端
DataOutputStream dos = new DataOutputStream(client.getOutputStream());
dos.writeUTF(uname + " " + upwd);
dos.flush();
// 接收结果
DataInputStream dis = new DataInputStream(client.getInputStream());
String datas = dis.readUTF();
System.out.println(datas);
// 3、释放资源
dos.close();
client.close();
}
}运行结果

















