欢迎光临散文网 会员登陆 & 注册

Java很详细的个人解析版本:网络编程,使用多线程实现1对1聊天,聊天室【诗书画唱】

2020-08-07 00:33 作者:诗书画唱  | 我要投稿

我和我文字的故事:开始写作的契机是我想记录我认为重要的一切!是为了不枉活过人生这一遭!是为了证明我曾存在过!


写作过程中印象最深的一件事之一:我突然感觉自己目前的渺小,目前厉害的人太多了!但我要借目前虽渺小,但有的独有优势变得比他们更厉害!而且要谦虚却不自卑,却不妄自菲薄,却不懦弱,却不胆小,却不无动于衷等。自信胆大,却不自傲,却不自大等。




使用多线程实现1对1聊天

package dengLu;


import java.io.*;

import java.net.*;

import java.util.Scanner;

public class oneVoneFu {

public static void main(String[] args) throws Exception{


System.out.println("诗书画唱SSHC,服务器端启动,"

+ "\n请先输入内容,将会发给客户端");

jieShouClass jieShouClass=new jieShouClass(33397);

// jieShouClass(int wofangduankou) ,

// 33397是接收客户端发送给服务端时,服务端要用来接受

// 客户端发来内容的端口号,33397为服务端专门用来接受

// 客户端发来内容的端口号


faSongClass faSongClass=

new faSongClass(44497,11197,"localhost");

//44497为当前服务器发送给客户端内容时要用的本机端口号,

//11197为客户本机端口号

new Thread(jieShouClass,"诗书画唱").start();

new Thread(faSongClass).start();

}


}


package dengLu;


import java.util.*;

import java.io.*;

import java.net.*;

public class oneVoneKe {

public static void main(String[] args)throws Exception {


System.out.println("诗书画唱,客户端启动");

jieShouClass jieShouClass=new jieShouClass(11197);


faSongClass faSongClass

=new faSongClass(22297,33397,"localhost");

// 这里的22297为端口号

new Thread(jieShouClass,"诗书画唱SSHC").start();

new Thread(faSongClass).start();

}

}

//————

//将发送数据封为一个类,

//将接收数据封为一个类,

//在用户不管是客户端还是服务器端都开启一个接收和发送的线程。

//————

class jieShouClass implements Runnable{

DatagramSocket DatagramSocket=null;

public jieShouClass(int benJiDuanKouHao){

try {

DatagramSocket=new DatagramSocket(benJiDuanKouHao);

} catch (SocketException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}


@Override

public void run() {

//接收数据也是死循环

while(true){

// byteArrayRead:用来读对方输入的内容的字节数组

byte[] byteArrayRead=new byte[1024*60];

DatagramPacket DatagramPacket=

new DatagramPacket

(byteArrayRead, byteArrayRead.length);

try {

DatagramSocket.receive(DatagramPacket);

//解析数据:

// byteArrayPrint:用来打印出读出的对方发送过来的

// 内容的字节数组

byte[] byteArrayPrint=DatagramPacket.getData();

int lenPrint=DatagramPacket.getLength();

// jieShouDaoDeNeiRong:接收到对方发来的内容

String jieShouDaoDeNeiRong

=new String(byteArrayPrint,0,lenPrint);

if(jieShouDaoDeNeiRong.trim().equals("不聊了")){

break;

}

System.out.println(Thread.currentThread().getName()

+":"+jieShouDaoDeNeiRong);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}//:接收数据

}DatagramSocket.close();

}


}


class faSongClass implements Runnable{

private int wofangduankou,duiFangDuanKouHao;

String duiFangIP=null;

Scanner s=new Scanner(System.in);


//发送的对象:

// benJiDuanKouHao:本机端口号

// duiFangDuanKouHao:对方端口号

// duiFangIP:对方IP

DatagramSocket DatagramSocket=null;

public faSongClass(int benJiDuanKouHao,

int duiFangDuanKouHao,String duiFangIP){

this.duiFangDuanKouHao=duiFangDuanKouHao;

this.duiFangIP=duiFangIP;

try {

DatagramSocket=new 

DatagramSocket(benJiDuanKouHao);

} catch (SocketException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

@Override

public void run() {

while(true){

//打包数据:

// shuRuNeiRong;输入内容

System.out.println(

// Thread.currentThread().getName()+

"——————\n"

+ "下面是评论区(请输入你的内容)\n"

+ "——————");

//System.out.println(

// Thread.currentThread().getName()+":");

String shuRuNeiRong=s.next();

DatagramPacket DatagramPacket

=new DatagramPacket(shuRuNeiRong.getBytes(),

shuRuNeiRong.getBytes().length,

new InetSocketAddress(duiFangIP,duiFangDuanKouHao));

if(shuRuNeiRong.trim().equals("不聊了")){

break;

}

try {

DatagramSocket.send(DatagramPacket);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

DatagramSocket.close();

}









}





Java很详细的个人解析版本:网络编程,使用多线程实现1对1聊天,聊天室【诗书画唱】的评论 (共 条)

分享到微博请遵守国家法律