socket聊天程序

套接字—Socket
1、编写服务器端程序:
创建一个服务器套接字(ServerSocket),绑定到指定端口;
调用accept方法,侦听来自客户端的请求,如果客户发出请求,则接受连接,返回通信套接字(Socket);
调用Socket的getInputStream和getOutputStream方法,获得输入/输出流,开始网络数据的接收和发送;
关闭通信套接字,关闭服务器套接字。
2、编写客户端程序:
创建一个套接字(Socket) ,向服务器的侦听端口发出请求;
与服务器正确连接后,调用Socket的getInputStream和getOutputStream方法,获得输入/输出流,开始网络数据的接收和发送;
关闭通信套接字。

案例2:完成控制台聊天程序,任意一方输入bye聊天结束。用两个线程模拟读取和写出数据,接收用户控制台输入的内容,
用Data数据流操作UTF格式的数据

客户端:
package com.chinasofti.io0731.net;

import java.io.*;
import java.net.Socket;
import java.util.Scanner;

public class ClientThread extends Thread {

@Override
public void run() {

        try {
            Socket socket = new Socket("10.96.10.189", 8080);
            InputStream is = socket.getInputStream();
            DataInputStream dis = new DataInputStream(is);

            OutputStream os = socket.getOutputStream();
            DataOutputStream dos = new DataOutputStream(os);
            Scanner scanner = new Scanner(System.in);
            while (true) {
                dos.writeUTF(scanner.next());
                dos.flush();
                System.out.println("--------------");
                String msg = dis.readUTF();
                System.out.println("服务器say:"+msg);
                if ("bye".equals(msg)) {
                    break;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

服务端:

package com.chinasofti.io0731.net;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class ServerThread extends Thread {

@Override
public void run() {

    //ServerSocket
    try {
        ServerSocket serverSocket = new ServerSocket(8080);
        //等待连接
        Socket socket = serverSocket.accept();//
        if (socket != null) {
            System.out.println("------客户端连接成功!-------");
            InputStream is = socket.getInputStream();
            DataInputStream dis = new DataInputStream(is);

            OutputStream os = socket.getOutputStream();
            DataOutputStream dos = new DataOutputStream(os);
            Scanner scanner = new Scanner(System.in);
            while (true) {
                String msg = dis.readUTF();
                System.out.println("客户端say:"+msg);
                // String msg = reply(is, os, baos);
                if ("bye".equals(msg)) {
                    break;
                }
                dos.writeUTF(scanner.next());
                System.out.println("服务端写出完成");
                dos.flush();
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

}

测试代码:
客户端测试:
package com.chinasofti.io0731.net;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

public class TestClient {

public static void main(String[] args) {
    //
   new ClientThread().start();
}

}

服务端测试:

package com.chinasofti.io0731.net;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class TestServer {

public static void main(String[] args) {

    new ServerThread().start();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值