基于TCP的网络通信
1 .单个客户端和服务器的连接
服务器端代码
package com.cc.test;
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;
/**
* 服务器端
* 基于TCP协议的网络通信实现用户登录
* @author Administrator
*
*/
public class Server {
public static void main(String[] args) throws IOException {
//1指定端口号
ServerSocket serverSocket = new ServerSocket(8888);
//2.accept等待客户端的连接
Socket socket = serverSocket.accept();
//3.获取输入流 ,读取客户端的信息
InputStream is =socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
//添加缓冲
BufferedReader br = new BufferedReader(isr);
String info = null ;
while((info=br.readLine())!=null){
System.out.println("服务器:得到客户端的信息"+info);
}
//开启新的流的时候必须执行下面一条语句
socket.shutdownInput();
//对客户端进行响应
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os);
pw.write("欢迎您的到来~~~~~");
pw.flush();
//最后关闭流
socket.close();
}
}
客户端代码
package com.cc.test;
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;
import java.net.UnknownHostException;
/**
* 客户端
* @author Administrator
*
*/
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException {
//创建客户端socket 并指定服务器地址和端口号
Socket socket = new Socket("127.0.0.1", 8888);
//获取输出流
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os);//包装成打印流
pw.write("用户名:admin;密码:123");
pw.flush();//刷新缓存
//关闭流
socket.shutdownOutput();
//处理结果获得输入流
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String info = null ;
while((info=br.readLine())!=null){
System.out.println("客户端:得到服务器的消息"+info);
}
socket.close();
}
}
2 多个客户端和一个服务器的通信
客户端
package com.cc.test;
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.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 服务器端
* 基于TCP协议的网络通信实现用户登录
* @author Administrator
*
*/
public class Server {
public static void main(String[] args) throws IOException {
//1指定端口号
ServerSocket serverSocket = new ServerSocket(8888);
//记录连接客户端的数量
int count = 0 ;
Socket socket =null ;
while(true){
//2.accept等待客户端的连接
socket = serverSocket.accept();
//启用线程
ServerThread serverThread = new ServerThread(socket);
serverThread.start();
count++;
System.out.println("客户端连接数量"+count);
InetAddress address =socket.getInetAddress();
System.out.println("客户端的IP"+address.getHostAddress());
}
}
}
线程类
package com.cc.test;
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 ServerThread extends Thread{
//与本线程相关的socket
Socket socket = null ;
public ServerThread(Socket socket) {
this.socket=socket ;
}
@Override
public void run() {
try {
//3.获取输入流 ,读取客户端的信息
InputStream is =socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
//添加缓冲
BufferedReader br = new BufferedReader(isr);
String info = null ;
while((info=br.readLine())!=null){
System.out.println("服务器:得到客户端的信息"+info);
}
//开启新的流的时候必须执行下面一条语句
socket.shutdownInput();
//对客户端进行响应
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os);
pw.write("欢迎您的到来~~~~~");
pw.flush();
} catch (IOException e) {
e.printStackTrace();
}
finally {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
客户端
package com.cc.test;
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;
import java.net.UnknownHostException;
/**
* 客户端
* @author Administrator
*
*/
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException {
//创建客户端socket 并指定服务器地址和端口号
Socket socket = new Socket("127.0.0.1", 8888);
//获取输出流
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os);//包装成打印流
pw.write("用户名:paul;密码:123");
pw.flush();//刷新缓存
//关闭流
socket.shutdownOutput();
//处理结果获得输入流
InputStream is =socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String info = null ;
while((info=br.readLine())!=null){
System.out.println("客户端:得到服务器的消息"+info);
}
socket.close();
}
}