서버프로그램에서 소켓이 가장 중요!
소켓은 아이피 번호와 포트번호를 합친 것

CMD로 아이피주소 확인 후 아이피 주소 입력

package Ser_Cli1;
import java.net.*;
import java.io.IOException;
public class MySer extends Thread {
ServerSocket ss;
public MySer() { // 생성자
try {
ss= new ServerSocket(3000); //3000은 포트번호
System.out.println("Server ready...");
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void run() {
while (true) {
try {
Socket s = ss.accept(); // 클라이언트의 요청을 받음
String ip = s.getInetAddress().getHostAddress(); // 접속한 클라이언트의 IP
System.out.println(ip+"님이 왔다감!!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
MySer ms = new MySer();
ms.start();
}
}
package Ser_Cli1;
import java.net.*;
import java.io.IOException;
import java.net.UnknownHostException;
public class MyCli {
public static void main(String[] args)
throws UnknownHostException, IOException{
Socket s=new Socket("192.168.93.1", 3000); // IP_주소와 포트를 넣어서 서버에 접속
}
}

public class My_Server extends Thread {
ServerSocket ss;
public My_Server() {
try {
ss= new ServerSocket(3001);
System.out.println("서버시작....");
} catch (Exception e) {
}
}
public static void main(String[] args) {
new My_Server().start();
}
@Override
public void run() {
while (true) {
try {
Socket s = ss.accept(); // 클라이언트를 계속 기다림
BufferedReader reader = new BufferedReader(new InputStreamReader(s.getInputStream()));
String msg = reader.readLine();
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip+ ":"+msg);
} catch (Exception e) {
}
}
}
}
package Ser_Cli2;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class My_Client {
public static void main(String[] args) {
System.out.println("입력: ");
Scanner scan = new Scanner(System.in);
String msg = scan.nextLine();
if (msg != null&& msg.trim().length()>0) {
Socket s =null;
try {
s = new Socket("192.168.93.1", 3001);
PrintWriter out =new PrintWriter(s.getOutputStream());
out.write(msg);
out.flush();
if (out != null) {
out.close();
}
} catch (Exception e) {
}finally {
try {
if (s != null) {
s.close();
}
} catch (Exception e2) {
}
}
}
}
}

채팅서버 구축 및 클라이언트 생성
package Chats;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class ChatSer extends Thread {
ServerSocket ss;
public ChatSer() {
try {
ss= new ServerSocket(3200);
System.out.println("채팅 서버 시작.....");
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new ChatSer().start(); // Thread를 상속받은 CharSer이므로 바로 start() 메써드 사용 가능
}
@Override
public void run() {
while (true) {
try {
Socket s = ss.accept();
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip + "님 접속 했습니다");
} catch (Exception e) {
}
}
}
}

package Chats;
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.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class ChatCli1 extends JFrame implements Runnable{ // JFrame 화면 구현
JTextArea area;
JTextField input;
JButton send_bt;
JPanel south_p;
Socket s;
BufferedReader in;
PrintWriter out;
Thread t;
public ChatCli1() {
area =new JTextArea();
this.add(area);
south_p =new JPanel(new BorderLayout());
south_p.add(input=new JTextField());
south_p.add(send_bt=new JButton("보내기"), BorderLayout.EAST);
this.add(south_p, BorderLayout.SOUTH);
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
out.println("xx: ~ X");
}
});
send_bt.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent args0) {
sendData(); // 서버로 메시지 전달 메써드
}
});
setBounds(100, 100, 400, 500);
setVisible(true);
connected(); // 서버 접속
t = new Thread(this);
t.start();
}
private void connected(){
try {
// 서버 접속
s = new Socket("192.168.10.244", 3200);
in = new BufferedReader(new InputStreamReader(s.getInputStream()));
out = new PrintWriter(s.getOutputStream(), true);
} catch (Exception e) {
}
}
public static void main(String[] args) {
new ChatCli1();
}
@Override
public void run() {
// 서버로부터 전달되는 메세지를 기다렸다가
// 메세지가 도착하면 화면에 출력
while (true) {
try {
String msg = in.readLine(); // 대기상태
if (msg.equals("xx:~X"))
break;
if (msg != null)
area.append(msg+"\r\n");
} catch (Exception e) {
}
}
closed(); //열려있는 스트림을 닫는 메서드
System.exit(0); // 프로그램 종료!!
}
private void sendData() {
String msg = input.getText().trim();
if (msg.length() > 0) {
// 한 글자라도 입력했을 때 서버로 보내기
out.println(msg);
}
input.setText(""); //청소!!
}
private void closed(){
try {
if(out != null)
out.close();
if(in != null)
in.close();
if(s != null)
s.close();
} catch (Exception e) {
}
}
}
'JAVA' 카테고리의 다른 글
| [JAVA] 문제 풀이 0809 (0) | 2022.08.09 |
|---|---|
| [JAVA] JDBC (0) | 2022.08.09 |
| [JAVA] IO < 버퍼>, < byte stream>, <Char stream> (0) | 2022.08.08 |
| [JAVA]file class (0) | 2022.08.08 |
| [JAVA] IO(Input/Output) (0) | 2022.08.03 |
댓글