TCP实现聊天功能

简介: TCP实现聊天功能

最近复习了下TCP,写了个聊天demo

服务端:

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class TcpService {
  static OutputStream os =null;
  static InputStream is=null;
  static Socket socket = null;
  static ServerSocket serverSocket = null;
  public static void main(String[] args) {
    Scanner cin = new Scanner (System.in);
    try {
      System.out.println("服务器启动");
      //构造ServerSocket实例,指定端口监听客户端的连接请求
      serverSocket = new ServerSocket(8080);
      // 建立跟客户端的连接
      socket = serverSocket.accept();
      // 向客户端发送消息
      is = socket.getInputStream();
      os = socket.getOutputStream();
      InputStreamReader isr=new InputStreamReader(is,"utf-8");
      OutputStreamWriter osw = new OutputStreamWriter(os,"utf-8");
      //osw.write(msg);
      // 接受客户端的响应
      new Thread() {
        public void run() {
          // TODO Auto-generated method stub
          while (true) {
            //byte b[] = new byte[1024];
            char[] cha=new char[1024];
            int len=0;
            try {
              len = isr.read(cha);
            } catch (IOException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
            }  
                System.out.println("小明说:"+new String(cha,0,len));  
          }
        }
      }.start();
      //向客户端发送消息
      new Thread(){
        public void run(){
          // TODO Auto-generated method stub
          while(cin.hasNext()){
            String str=cin.next();
            try {
              //osw.write(str);
              os.write(str.getBytes());
            } catch (IOException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
            }
          }
        }
      }.start();
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
    }
  }
}

客户端:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.Scanner;
public class test {
  static Socket socket = null;
  static InputStream is = null;
  static OutputStream os = null;
  public static void main(String[] args) {
    Scanner cin = new Scanner (System.in);
    try {
      // 对服务端发起连接请求
      System.out.println("已经连接服务器");
      socket = new Socket("localhost", 8080);
      is = socket.getInputStream();
      os = socket.getOutputStream();
      InputStreamReader isr=new InputStreamReader(is,"GBK");
      OutputStreamWriter osw = new OutputStreamWriter(os,"GBK");
      os.write("已经接服务器。".getBytes());
      //接收服务器信息
      new Thread() {
        public void run() {
          // TODO Auto-generated method stub
          while (true) {
            //byte b[] = new byte[1024];
            char[] cha=new char[1024];
            int len=0;
            try {
              len = isr.read(cha);
            } catch (IOException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
            }  
                System.out.println("小红说:"+new String(cha,0,len));  
          }
        }
      }.start();
      // 给服务端发送响应信息
      new Thread(){
        public void run(){
          // TODO Auto-generated method stub
          while(cin.hasNext()){
            String str=cin.next();
            try {
              //osw.write(str);
              os.write(str.getBytes());
            } catch (IOException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
            }
          }
        }
      }.start();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
}

效果图:

微信图片_20221213175321.png

相关文章
|
网络协议 Java
Java网络编程:UDP/TCP实现实时聊天、上传图片、下载资源等
ip地址的分类: 1、ipv4、ipv6 127.0.0.1:4个字节组成,0-255,42亿;30亿都在北美,亚洲就只有4亿 2011年就用尽了。
Java网络编程:UDP/TCP实现实时聊天、上传图片、下载资源等
|
网络协议 Java
Java网络编程Demo,使用TCP 实现简单群聊功能Groupchat,创建一个服务端,使多个客户端都能收到消息
Java网络编程Demo,使用TCP 实现简单群聊功能Groupchat,创建一个服务端,使多个客户端都能收到消息
163 0
Java网络编程Demo,使用TCP 实现简单群聊功能Groupchat,创建一个服务端,使多个客户端都能收到消息
|
网络协议 Java
Java网络编程Demo,使用TCP 实现简单群聊功能GroupchatSimple,多个客户端输入消息,显示在服务端的控制台
Java网络编程Demo,使用TCP 实现简单群聊功能GroupchatSimple,多个客户端输入消息,显示在服务端的控制台
150 0
Java网络编程Demo,使用TCP 实现简单群聊功能GroupchatSimple,多个客户端输入消息,显示在服务端的控制台
|
网络协议 物联网 BI
【计算机网络】计算机网络概述 : 总结 ( 概念 | 组成 | 功能 | 分类 | 性能指标 | OSI 七层参考模型 | TCP/IP 模型 | 五层参考模型 )★★★
【计算机网络】计算机网络概述 : 总结 ( 概念 | 组成 | 功能 | 分类 | 性能指标 | OSI 七层参考模型 | TCP/IP 模型 | 五层参考模型 )★★★
161 0
|
网络协议 C语言 网络架构
【计算机网络】传输层 : 传输层概述 ( 设备层级 | 传输层功能 | TCP 协议 | UDP 协议 | 复用与分用 | 端口号 | 套接字 )
【计算机网络】传输层 : 传输层概述 ( 设备层级 | 传输层功能 | TCP 协议 | UDP 协议 | 复用与分用 | 端口号 | 套接字 )
237 0
|
Web App开发 网络协议 Windows
|
网络协议 网络架构
OSI与TCP/IP各层的结构与功能,都有哪些协议
前言:从今天开始后续会不断更新计算机网络的一些非常重要的知识,可能很多人都不知学计算机网络有什么用,我想说的是它真的比较重要,像咱们学校只要是学计算机这个专业都要学习这门课程。另外大家要是去一些像BAT,阿里,蘑菇街,腾讯….这样的大公司面试的话,TCP/IP知识也是必不可少的。我每次发的文章就是面试经常会涉及的问题。 OSI的七层体系结构概念清楚,理论也很完整,但是它比较
1846 0
|
存储 网络协议 Java
JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用
JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例,我们暂时不讲了,我们直接来重点吧,关于JAVA的网络请求是怎么实现的...
1057 0