개인/개인공부
[Java/eclipse] TCP 소켓 서버 연결
Dev.chandel
2024. 3. 12. 09:23
2개의 콘솔창(서버/클라) 동시출력 : https://blog.naver.com/xxxstarxxx/221014452771
[자바] 이클립스 콘솔창 2개로 서버 클라이언트 보기
※ 소스는 그림 제일 아랫쪽에 있어요. 이글을 올리는 목적은 강의에서 cmd 창을 사용하길래 이클립스에선 ...
blog.naver.com
[Java] 멀티 소켓 통신 채팅 프로그램 tcp 서버/클라이언트 구조 - 콘솔
먼저 서버 구현 코드는 다음과 같습니다. import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader
igkrap.tistory.com
package GameTCP;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
public class Server extends Thread
{
static ArrayList<Socket> users = new ArrayList<Socket>();
Socket socket;
String nick="";
public Server(Socket socket)
{
this.socket = socket;
users.add(socket);
}
@Override
public void run()
{
try
{
while (true)
{
String s;
InputStream input = socket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input,"UTF-8")); // 읽기
if ((s = reader.readLine()) != null)
{
if (s.equals("/quit"))
{
PrintWriter wr = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF-8")),true);
wr.println(s);
break;
}
if (s.startsWith("/init_name "))
{
nick=s.split(" ")[1];
for (int i = 0; i < users.size(); i++)
{
OutputStream out = users.get(i).getOutputStream(); // 쓰기
PrintWriter writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(out,"UTF-8")),true);
//PrintWriter writer = new PrintWriter(out, true); //
writer.println(nick+" 님이 입장하셨습니다.");
// writer.flush();
}
continue;
}
else if (s.startsWith("/init_game "))
{
nick=s.split(" ")[1];
for (int i = 0; i < users.size(); i++)
{
OutputStream out = users.get(i).getOutputStream(); // 쓰기
PrintWriter writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(out,"UTF-8")),true);
//PrintWriter writer = new PrintWriter(out, true); //
writer.println(nick+" 님이 입장하셨습니다.");
// writer.flush();
}
continue;
}
System.out.println(s);
for (int i = 0; i < users.size(); i++)
{
OutputStream out = users.get(i).getOutputStream(); // 쓰기
PrintWriter writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(out,"UTF-8")),true);
//PrintWriter writer = new PrintWriter(out, true); //
writer.println(s);
// writer.flush();
}}
}
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
for (int i = 0; i < users.size(); i++)
{
OutputStream out;
try
{
out = users.get(i).getOutputStream();
PrintWriter writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(out,"UTF-8")),true);
//PrintWriter writer = new PrintWriter(out, true); //
writer.println( nick+"님이 방을 나갔습니다.");
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} // 쓰기
// writer.flush();
}
}
}
public static void main(String[] args)
{
// TODO Auto-generated method stub
int socket = 5050;
try {
ServerSocket ss = new ServerSocket(socket);
System.out.println("서버 열림");
while (true)
{
Socket user = ss.accept();
System.out.println("클라이언트 입장 " + user.getLocalAddress() + " : " + user.getLocalPort());
Thread serverThread = new Server(user);
serverThread.start();
}
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package GameTCP;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class Client
{
public static void main(String[] args)
{
try {
Socket socket=new Socket("192.168.10.4",5050);
System.out.println("서버 접속 성공");
Scanner sc=new Scanner(System.in);
System.out.println("이름을 설정해주세요.");
Sender sThread=new Sender(socket,sc.nextLine());
Receiver rThread=new Receiver(socket);
sThread.start();
rThread.start();
sThread.join();
rThread.join();
socket.close();
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println("서버 접속 실패");
}
}
}
class Receiver extends Thread
{
Socket socket;
public Receiver(Socket s)
{
socket=s;
}
@Override
public void run()
{
InputStream input;//읽는 stream
BufferedReader reader;// input 내용을 buffer로 받아옴
try
{
while(true)
{
String s = null;
input = socket.getInputStream();
reader=new BufferedReader(new InputStreamReader(input,"UTF-8")); //읽기
if((s=reader.readLine())!=null )
{
if (s.equals("/quit")) break;
System.out.println(s);
}
}
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class Sender extends Thread
{
Socket socket;
String name;
Scanner sc;
public Sender(Socket s,String n)
{
sc=new Scanner(System.in);
socket=s;
name=n;
}
@Override
public void run()
{
try
{
OutputStream out= socket.getOutputStream();
PrintWriter writer =
new PrintWriter(new BufferedWriter(new OutputStreamWriter(out,"UTF-8")),true);
writer.println("/init_name "+name);
while(true)
{
//쓰기
//PrintWriter writer=new PrintWriter(out,true); //
String s=sc.next();
if (s.equals("/quit"))
{
writer.println(s);
break;
}
writer.println(name+": "+s);
//writer.flush();
}
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}