java网络编程服务端,客户端讲解
其他
2019-02-12 06:00:56
阅读次数: 0
对于ServerSocket类(服务端):
-
当ServerSocket的类的对象创建后,调用accept()方法接收客户端发来的连接请求。
-
accept()方法采用的是“阻塞”方式监听,直到客户端连接之后程序才可以向下继续执行并返回一个与客户端Socket对象相连的Socket对象。
-
服务器端的Socket对象使用getOutputStream()方法获得的输出流,将指向客户端Socket对象使用getInputStream()方法获得的那个输入流。
-
同样地,服务器端的Socket对象使用的getInputStream()方法获得的输入流,将指向客户端Socket对象使用getOutputStream()方法获得的那个输出流。
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class ServerDemo {
public ServerDemo(){
}
public static void main(String[] args) {
ServerSocket server =null; //声明ServerSocket对象
Socket socket =null; //声明Socket对象
DataInputStream din=null; //声明DataInputStream对象
DataOutputStream dout=null; //声明DataOutputStream对象
try
{
server =new ServerSocket (8000); //实例化ServerSocket对象
System.out.println("等待客户端连接......");
socket = server.accept(); //实例化Socket对象,阻塞等待连接
System.out.println("客户端连接上......\n客户端来自:"+
socket.getInetAddress().getHostAddress()); //获取客户端IP
din = new DataInputStream(socket.getInputStream()); //实例化DataInputStream对象
dout =new DataOutputStream(socket.getOutputStream());//实例化DataOutputStream对象
String strMessage =null;
Scanner scan =new Scanner(System.in);
boolean flag=true; //标记位
while (flag) //无限制接收客户端连接
{
strMessage = din.readUTF(); //读取客户端发送信息
if (!strMessage.equals("bye")) //若信息为bye则退出,否则继续
{
System.out.println("客户端消息:\n"+strMessage ); //输出客户端内容
System.out.println("回复客户端:");
strMessage =scan.next(); //输入消息
dout.writeUTF(strMessage); //向客户端发送
dout.flush();
}else{
din.close(); //关闭输入流
dout.close(); //关闭输出流
flag=false; //退出死循环
}
}
server.close(); //关闭服务器
System.out.println("服务器退出....");
}catch (Exception e){
e.printStackTrace();
}
}
}
对于Socket类(客户端):
-
在Java中,有专门的Socket类来处理用户的请求和响应。利用Socket 类的方法,就可以实现两台计算机之间的通信。
-
客户端创建Socket 对象之后,会向指定的IP地址即端口尝试连接。
-
服务端的Socket接到连接请求后创建新的Socket与客户端的Socket进行连接。若服务端Socket与客户端Socket连接成功之后,就可以获取Socket中的输入输出流。
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;
import java.util.Scanner;
public class ClientDemo {
public ClientDemo(){
}
public static void main(String[] args) {
Socket socket =null; //声明Socket对象
DataInputStream din=null; //声明DataInputStream对象
DataOutputStream dout=null; //声明DataOutputStream对象
try {
System.out.println("尝试连接服务器......");
socket = new Socket("127.0.0.1",8000); //实例化Socket对象
System.out.println("连接服务器成功......");
din = new DataInputStream(socket.getInputStream()); //实例化DataInputStream对象
dout =new DataOutputStream(socket.getOutputStream()); //实例化DataOutputStream对象
String strMessage =null;
Scanner scan =new Scanner(System.in);
boolean flag=true; //标记位
while (flag)
{
System.out.println("发送消息:");
strMassage =scan.next();
dout.writeUTF(strMessage); //向服务器发送消息
dout.flush();
strMessage = din.readUTF(); //读取服务器消息
if (!strMessage.equals("bye")) //若信息为bye则退出,否则继续
{
System.out.println("接收消息:\n"+strMessage); //输出消息
}else{
din.close(); //关闭输入流
dout.close(); //关闭输出流
flag=false; //退出死循环
}
}
socket.close(); //关闭服务器
System.out.println("服务器退出....");
}catch (Exception e){
e.printStackTrace();
}
}
}
转载自blog.csdn.net/qq_40629792/article/details/85221296