【达内课程】Socket编程基础(1)



栗子

Server.java

/**
 * 服务端
 */
public class Server {
    public static void main(String[] args) {
        try {
            ServerSocket ss = new ServerSocket(8888);
            //阻塞执行 接受客户端的连接请求
            System.out.println("服务端已启动...");
            Socket socket = ss.accept();
            System.out.println("客户端进来了"+socket.getInetAddress());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

Client.java

/**
 * 客户端
 */
public class Client {
    public static void main(String[] args) {
        //代表本机
        /*String ip = "localhost";
        String ip = "192.168.137.1";*/

        String ip = "127.0.0.1";
        try {
            //自动建立链接
            Socket socket = new Socket(ip,8888);
            System.out.println("客户端连接成功");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

其中ip地址可以进入cmd输入ipconfig查看
这里写图片描述
这里标出的一个是ipv6的地址,一个是ipv4的地址

client中的ip地址以下两种方式都代表本机

String ip = "localhost";
String ip = "127.0.0.1";

先运行Server.java
这里写图片描述
然后打开一个新的Console View,运行Client
这里写图片描述
这时候打开第一个Console View,选择第一个进程,就可以查看Server的输出日志了
这里写图片描述

栗子2

下面做一个栗子,让服务端和客户端对话
Server.java

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 服务端
 */
public class Server {
    public static void main(String[] args) {
        try {
            ServerSocket ss = new ServerSocket(8888);
            //阻塞执行 接受客户端的连接请求
            System.out.println("服务端已启动...");
            Socket socket = ss.accept();
            System.out.println("客户端进来了"+socket.getInetAddress());
            //获取输出流
            OutputStream os = socket.getOutputStream();
            DataOutputStream dos = new DataOutputStream(os);
            dos.writeUTF("请问您来点什么?");
            dos.flush();
            //接收请求
            DataInputStream dis = new DataInputStream(socket.getInputStream());
            String recept = dis.readUTF();
            dos.writeUTF("对不起,没有"+recept);
            dos.flush();
            dos.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

Client.java

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
import java.util.Scanner;

/**
 * 客户端
 */
public class Client {
    public static void main(String[] args) {
        String ip = "localhost";
        try {
            //自动建立链接
            Socket socket = new Socket(ip,8888);
            System.out.println("客户端连接成功");
            //读取服务端写过来的字符串
            InputStream is = socket.getInputStream();
            DataInputStream dis = new DataInputStream(is);
            String text = dis.readUTF();
            System.out.println("Server:"+text);
            //在控制台接受客户端的参数
            Scanner console = new Scanner(System.in);
            String line = console.nextLine();
            //输出给服务端
            DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
            dos.writeUTF(line);
            dos.flush();
            //读取服务端的回应
            text = dis.readUTF();
            System.out.println("Server:"+text);

            dos.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

首先运行服务端
这里写图片描述
然后运行客户端
这里写图片描述
接下来输入一些东西,然后回车
这里写图片描述

栗子3

对上面的栗子改进下,让它可以一直“聊天”
Server.java

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 服务端
 */
public class Server {
    public static void main(String[] args) {
        try {
            ServerSocket ss = new ServerSocket(8888);
            //阻塞执行 接受客户端的连接请求
            System.out.println("服务端已启动...");
            Socket socket = ss.accept();
            System.out.println("客户端进来了"+socket.getInetAddress());
            //获取输出流
            OutputStream os = socket.getOutputStream();
            DataOutputStream dos = new DataOutputStream(os);
            dos.writeUTF("请问您来点什么?");
            dos.flush();
            //接收请求
            DataInputStream dis = new DataInputStream(socket.getInputStream());
            while(true){
                String recept = dis.readUTF();
                if(recept.equals("不吃了")){
                    break;
                }
                dos.writeUTF("对不起,没有"+recept+",换一个?");
                dos.flush();
            }

            dos.writeUTF("一路走好");
            dos.flush();
            dos.close();
            socket.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

Client.java

/**
 * 客户端
 */
public class Client {
    public static void main(String[] args) {
        String ip = "localhost";
        try {
            //自动建立链接
            Socket socket = new Socket(ip,8888);
            System.out.println("客户端连接成功");
            //读取服务端写过来的字符串
            InputStream is = socket.getInputStream();
            DataInputStream dis = new DataInputStream(is);
            DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
            String text = dis.readUTF();
            System.out.println("Server:"+text);
            //在控制台接受客户端的参数
            Scanner console = new Scanner(System.in);

            while(true){
                String line = console.nextLine();
                //输出给服务端
                dos.writeUTF(line);
                dos.flush();
                //读取服务端的回应
                text = dis.readUTF();
                System.out.println("Server:"+text);

                if(text.equals("一路走好")){
                    break;
                }
            }

            dos.close();
            socket.close();

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

运行服务端
这里写图片描述
运行客户端,并输入一些文字
这里写图片描述

猜你喜欢

转载自blog.csdn.net/u010356768/article/details/81025582