자바 socket 다 중 스 레 드 채 팅 방
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.*;
public class Server extends JFrame implements Runnable,ActionListener{
JPanel jp;
JButton jb,jb2;
ServerSocket ss;
Socket s;
ArrayList al=new ArrayList();
HuThread ht;
JTextArea jta;
JScrollPane jsp;
boolean hufan=true;
public static void main(String[] args) {
new Server();
}
public Server(){
jp=new JPanel();
jb=new JButton(" ");
jb2=new JButton(" ");
jb.addActionListener(this);
jb2.addActionListener(this);
jta=new JTextArea();
jsp=new JScrollPane(jta);
jp.add(jb);
jp.add(jb2);
this.add(jsp);
this.add(jp,"North");
this.setSize(400, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
@Override
public void run() {
while(hufan){
try {
s=ss.accept();
al.add(s);
ht=new HuThread(s,al);
Thread tt=new Thread(ht);
tt.start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==jb){
try {
ss=new ServerSocket(5555);
hufan=true;
jta.setText(" ");
Thread t=new Thread(this);
t.start();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}else if(e.getSource()==jb2){
try {
hufan=false;
ss.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
jta.setText(" ");
}
}
}
class HuThread implements Runnable{
Socket s;
ArrayList al;
public HuThread(Socket s,ArrayList al){
this.s=s;
this.al=al;
}
public void run() {
try{
BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
while(true){
String info=br.readLine();
for(int i=0;i<al.size();i++){
Socket s2=(Socket)al.get(i);
PrintWriter pw=new PrintWriter(s2.getOutputStream());
pw.println(info);
pw.flush();
}
}
}catch(Exception e){
e.printStackTrace();
}
}
}
CLIENT
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
public class Client extends JFrame implements ActionListener,Runnable{
JTextArea jta;
JTextField jtf;
JPanel jp;
JButton jb;
BufferedReader in;
PrintWriter out;
JScrollPane jsp;
public static void main(String args[]){
Client c = new Client();
// c.receive();
}
public Client(){
jp=new JPanel();
jta=new JTextArea();
jta.setEditable(false);
jsp=new JScrollPane(jta);
jb=new JButton(" ");
jb.addActionListener(this);
jtf=new JTextField(20);
jp.add(jtf);
jp.add(jb);
this.add(jsp,"Center");
this.add(jp,"South");
try {
Socket s = new Socket("127.0.0.1",5555);
System.out.println(" ");
out = new PrintWriter(s.getOutputStream());
in = new BufferedReader(new InputStreamReader(s.getInputStream()));//
} catch (Exception e) {
e.printStackTrace();
}
Thread t=new Thread(this);
t.start();
this.setSize(400,300);
this.setLocation(400, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
//
// private void receive(){
// try {
// while(true){
// String str = in.readLine();// BufferedReader
// if(str==null){
// return ;
// }
// jta.append(" "+str+"\r
");// JTextArea ,
// }
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
@Override
public void actionPerformed(ActionEvent arg0) {
String text=jtf.getText();
jtf.setText("");
out.println(text);
out.flush();
}
@Override
public void run() {
try {
while (true) {
String str = in.readLine();
if (str != null) {
jta.append(" " + str + "\r
");
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.