socket接口实现客户端和服务端互相通信

6 篇文章 0 订阅
6 篇文章 0 订阅

package socket;

import java.io.BufferedWriter;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;


/**
 * 聊天室客户端
 * @author soft01
 *
 */
public class Client {
    /*
     * java.net.Socket
     * 封装了tcp协议的通讯细节,使得我们使用它就可以完成与远程计算机tcp连接以及数据
     * 传输
     * 并且,完成数据传输是基于两条流的读写进行
     *
     */
    private Socket socket;
    /*
     * 构造方法,用于初始化客户端
     */
    public Client(){
        try {
            /*
             *    socket实例化时需要指定两个参数:
             *    1.服务端的地址信息(IP)
             *    2.服务端应用程序绑定的端口
             *    
             *  socket实例化的过程就是连接服务端的过程,成功连接则实例化成功,否则
             *  实例化过程抛出异常
             *  我们通过IP地址找到网络是那个的服务端所在计算机,通过端口找到该机器
             *  上的服务端应用程序
             */
            System.out.println("正在连接服务端");
            socket=new Socket("176.30.9.169",8088);
            System.out.println("已连接服务端!");

 

        }catch(Exception e) {
            e.printStackTrace();
        }
    }
    //客户端开始工作方法
    public void start() {
        try {
            /*
             * OutputStream getOutputStream 通过socket获取字节输出流写出的字节
             * 可以通过网络发送给远端计算机
             *
             */
            OutputStream out= socket.getOutputStream();
            OutputStreamWriter osw=new OutputStreamWriter(out,"utf-8");
            BufferedWriter bw=new BufferedWriter(osw);
            PrintWriter pw=new PrintWriter(bw,true);
            Scanner sc=new Scanner(System.in);
            while(true) {
            String s=sc.nextLine();
            pw.println(s);
            System.out.println("发送完毕");
            }
            
            
            
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        Client client=new Client();
        client.start();

 

    }

 


}

 

 

 

 

package socket;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 聊天室服务端
 * @author soft01
 *
 */
public class Server {
    /*
     * java.net.ServerSocket
     * 运行在服务端的ServerSocket
     * 主要有两个工作:
     * 1.向系统申请服务端端口,客户端就是通过这个端口与服务端建立连接的
     * 2.监听该端口,这样一旦一个客户端进行连接时,serverSocket会自动创建一个
     * socket通过这个socket就可以与该客户端交互了
     *
     */
    private ServerSocket server;

    public Server() {
        try {
            /*
             * 实例化ServerSocket的同时需要向系统申请服务端口,客户端
             * 就是通过这个端口与服务端建立连接的,如果该端口被系统的其他程序占用,会抛出异常
             *
             */
            System.out.println("正在启动服务端");
            server=new ServerSocket(8088);
            System.out.println("服务端启动完毕!");
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
    public void start() {
        try {
            /*
             * Socket accept()
             * 该方法是一个阻塞方法,调用后服务端开始等待客户端连接,直到
             * 一个客户端连接为止,并且此时会返回一个socket实例,使用这个实例
             * 即可与客户端进行交互
             * 多次调用该方法可以接受多个客户端的连接
             *
             */

            System.out.println("等待客户端连接。。。");
            Socket socket=server.accept();
            System.out.println("一个客户端连接了! ");

            /*
             * InputStream getInputStream()
             * 通过socket获取的输入流可以读取远端计算机发送来的字节
             *
             */
            InputStream in= socket.getInputStream();
            InputStreamReader isr=new InputStreamReader(in,"utf-8");
            BufferedReader br=new BufferedReader(isr);
            while(true) {
                String line=br.readLine();
                System.out.println("客户端说:"+line);
            }
        }
    catch(Exception e) {
        e.printStackTrace();
    }
    
}
public static void main(String[] args) {
    Server server=new Server();
    server.start();
}


}

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
public class Myconnection { /// <summary> /// 连接套接字 /// </summary> Socket _client = null; /// <summary> /// 信息展示 /// </summary> ShowMgs _showMgs = null; /// <summary> /// 关闭通信通道 /// </summary> ShutDown _shutDown = null; /// <summary> /// 无参构造函数 /// </summary> public Myconnection() { } bool _working = true; /// <summary> /// 带参构造函数 /// </summary> /// <param name="client"></param> /// <param name="shoeMgs"></param> /// <param name="shutMgs"></param> public Myconnection(Socket client, ShowMgs showMgs, ShutDown shutMgs) { this._client = client; this._showMgs = showMgs; this._shutDown = shutMgs; //创建线程去监听客户端 Thread thread = new Thread(Accept); thread.IsBackground = true; thread.Start(); } public void Accept() { try { //监听客户端信息 while (_working) { //创建缓存区 byte[] _byte = new byte[1024 * 1024 * 1]; //接收客户端信息并保存到缓存区 int _length = _client.Receive(_byte); //将数组转换成服务器 string str = Encoding.Default.GetString(_byte, 0, _length); _showMgs(str); } } catch (Exception ex) { _showMgs(ex.Message); _client.Shutdown(SocketShutdown.Both); _client.Disconnect(false); _client = null; } } /// <summary> /// 发送文本信息 /// </summary> /// <param name="str"></param> public void SendText(string str) { //将字符串转换成数组 byte[] _byte = Encoding.Default.GetBytes(str); _client.Send(_byte); } /// <summary> /// 关闭通信通道 /// </summary> public void Close() { _client.Shutdown(SocketShutdown.Both); _client.Close(); _client.Disconnect(true); _client = null; } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

饭九钦vlog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值