服务器端:
1:创建ServerSocket对象,绑定监听端口
2:通过accept()方法监听客户端请求
3:连接建立后。通过输入流InputStream读取客户端的请求信息
4:通过输入流向客户端发送响应信息
5:关闭相关资源
客户端:
1:创建Socket对象,指明需要连接的服务器的地址和端口号
2:连接建立后,通过输出流向服务器端发送请求信息
3:通过输入流获取服务器响应的信息
4:关闭资源
服务器端:::
package TCP;
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;
public class Service1 {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//第一步 :建立服务器端serverSocket
ServerSocket service=new ServerSocket(8888);
Socket socket=null;
System.out.println("服务器端正在等待客户端响应!!!");
//第二步:监听此端口 ,并返回一个Socket
socket=service.accept();
//第三步:获取输入流 通过输入流读取客户端请求
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();
pw.close();
os.close();
br.close();
isr.close();
is.close();
socket.close();
service.close();
}
}
客户端:::
package TCP;
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;
public class Client1 {
public static void main(String[] args) throws UnknownHostException, IOException {
// TODO Auto-generated method stub
//第一步:创建socket指明需要接收的的端口和主机
Socket socket=new Socket("localhost",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);
}
is.close();
br.close();
pw.close();
os.close();
socket.close();
}
}
注意:
资源的关闭:打开的顺序和关闭的顺序是相反的 最先打开什么 最后关闭什么 不然容易出现connection reset等错误
PrintWriter输出流必须flush一下 不然在服务器端看不到输出流的字符串
先启动服务器端 再启动客户端
socket,getInputStream /outputStream获取的是字节流
如何用多线程实现一个服务器端 多个客户端::::
服务器端::
package TCP;
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;
public class Service1 {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//第一步 :建立服务器端serverSocket
ServerSocket service=new ServerSocket(8888);
Socket socket=null;
System.out.println("服务器端正在等待客户端响应!!!");
int count=0;
while(true){
//第二步:监听此端口 ,并返回一个Socket
socket=service.accept();
SocketThread1 socketthread=new SocketThread1(socket);
socketthread.start();
count++;
System.out.println("客户端的数量:"+count);
InetAddress address=socket.getInetAddress();
System.out.println("当前客户端的IP:"+address.getHostAddress());
}
}
}
客户端:::
package TCP;
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;
public class Client1 {
public static void main(String[] args) throws UnknownHostException, IOException {
// TODO Auto-generated method stub
//第一步:创建socket指明需要接收的的端口和主机
Socket socket=new Socket("localhost",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);
}
is.close();
br.close();
pw.close();
os.close();
socket.close();
}
}
线程处理类:::
package TCP;
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 SocketThread1 extends Thread{
private Socket socket=null;
public SocketThread1(Socket socket){
this.socket=socket;
}
public void run(){
InputStream is=null;
BufferedReader br=null;
InputStreamReader isr=null;
OutputStream os=null;
PrintWriter pw=null;
try {
is = socket.getInputStream();
isr=new InputStreamReader(is);
br=new BufferedReader(isr);
String info=null;
while((info=br.readLine())!=null){
System.out.println("服务器端接收客户端的数据为:"+info);
}
socket.shutdownInput();
/*
* ----------------------
* 响应客户端请求
*/
os=socket.getOutputStream();
pw=new PrintWriter(os);
pw.write("欢迎你:小伙子");
pw.flush();
pw.close();
os.close();
br.close();
isr.close();
is.close();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
//关闭资源
try {
if(pw!=null)
pw.close();
if(os!=null)
os.close();
if(br!=null)
br.close();
if(isr!=null)
isr.close();
if(is!=null)
is.close();
if(socket!=null)
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}}}
多启动几个客户端就可以查看效果