基于java socket实现 聊天小程序

网友投稿 323 2022-12-17


基于java socket实现 聊天小程序

服务器

package demo04;

import java.awt.BorderLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.net.ServerSocket;

import java.net.Socket;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.jscrollPane;

import javax.swing.JTextArea;

import javax.swing.JTextField;

import javax.swing.ScrollPaneConstants;

public class ownServer {

public static void main(String[] args) {

// TODO Auto-generated method stub

new Server().launch();

}

}

class Server{

JFrame frame;

JTextArea taArea;

JTextField tfField;

JButton sbButton;

DataInputStream read ;

DataOutputStream write;

ServerSocket scServerSocket;

Socket socket;

public void launch() {

CreateUI();

CreateNetWork();

new ServerWrite().start();

new ServerRead().start();

}

public void CreateUI() {

frame = new JFrame("MM Server");

JPanel Panle = new JPanel();

taArea = new JTextArea(15,25);

taArea.setLineWrap(true);

taArea.setWrapStyleWord(true);

taArea.setEditable(true);

JScrollPane qScroller=newJScrollPane(taArea);

qScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

qScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);

tfField = new JTextField(20);

sbButton = new JButton("发送");

Panle.add(qScroller);

Panle.add(tfField);

Panle.add(sbButton);

frame.getContentPane().add(BorderLayout.CENTER,Panle);

frame.setSize(400,400);

frame.setVisible(true);

}

public void close()

{

try

{

write.close();

read.close();

socket.close();

scServerSocket.close();

}

catch (Exception e)

{

System.exit(-1);

}

}

public void CreateNetWork() {

try {

scServerSocket =new ServerSocket(7780);

socket= scServerSocket.accept();

read = new DataInputStream(socket.getInputStream());

write = new DataOutputStream(socket.getOutputStream());

System.out.print("网络连接");

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}

}

class ServerRead extends Thread{

public void run() {

while (true) {

try {

String message = read.readUTF();

taArea.append("对方:"+message+ "\n");

} catch (Exception e1) {

// TODO: handle exception

JOptionPane.showMessageDialog(taArea, "提示: 服务端已经断开连接");

//e.printStackTrace();

//System.exit(-1);

return ;

}

}

}

}

class ServerWrite extends Thread{

public void run() {

tfField.addActionListener(new ServerListen());

sbButton.addActionListener(new ServerListen());

}

}

class ServerListen implements ActionListener{

@Override

public void actionPerformed(ActionEvent e) {

try {

String str = tfField.getText();

tvVuRpKDfField.setText("");

taArea.append("我: " + str + "\n");

write.writeUTF(str);

} catch (Exception e2) {

// TODO: handle exception

e2.printStackTrace();

}

}

}

}

客户端

package demo04;

import java.awt.BorderLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.net.Socket;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

import javax.swing.JTextField;

import javax.swing.ScrollPaneConstants;

public class ownClient {

public static void main(String[] args) {

vVuRpKD // TODO Auto-generated method stub

new Client().launch();

}

}

class Client{

JTextArea taArea;

JTextField tfField;

JButton sbButton;

DataInputStream read = null;

DataOutputStream write = null;

Socket socket;

public void launch() {

CreateUI();

CreatNetWork();

new ClientRead().start();;

new ClientWrite().start();;

}

public void CreateUI() {

JFrame frame = new JFrame("MM Client");

JPanel Panle = new JPanel();

taArea = new JTextArea(15,25);

taArea.setLineWrap(true);

taArea.setWrapStyleWord(true);

taArea.setEditable(true);

JScrollPane qScroller = new JScrollPane(taArea);

qScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

qScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);

tfField = new JTextField(20);

sbButton = new JButton("发送");

Panle.add(qScroller);

Panle.add(tfField);

Panle.add(sbButton);

frame.getContentPane().add(BorderLayout.CENTER,Panle);

frame.setSize(400,400);

frame.setVisible(true);

}

public void CreatNetWork() {

// TODO Auto-generated method stub

try {

socket = new Socket("127.0.0.1",7780);

write = new DataOutputStream(socket.getOutputStream());

read = new DataInputStream(socket.getInputStream());

System.out.print("已建立网络连接");

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}

}

class ClientRead extends Thread{

public void run() {

while (true) {

try {

String message= read.readUTF();

taArea.append("对方:"+message+ "\n");

} catch (Exception e1) {

// TODO: handle exception

JOptionPane.showMessageDialog(taArea, "提示: 客户端已经断开连接");

//e.printStackTrace();

//System.exit(-1);

return ;

}

}

}

}

class ClientWrite extends Thread{

public void run() {

tfField.addActionListener(new ClientListen());

sbButton.addActionListener(new ClientListen());

}

}

class ClientListen implements ActionListener{

@Override

public void actionPerformed(ActionEvent e) {

try {

String str = tfField.getText();

tfField.setText("");

taArea.append("我: " + str + "\n");

write.writeUTF(str);

} catch (Exception e2) {

// TODO: handle exception

e2.printStackTrace();

}

}

}

}

总结

以上所述是给大家介绍的基于java socket实现 聊天小程序,希望对大家有所帮助!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:为什么SpringMVC中请求的body不支持多次读取
下一篇:Java的带GUI界面猜数字游戏的实现示例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~