티스토리 뷰

언어/JAVA

[JAVA] TCP 통신 예제

Sime 2016. 9. 29. 10:14


서버


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
 
import javax.swing.plaf.synth.SynthSeparatorUI;
 
public class TcpServer {
    public static void main(String[] args) {
        
        try {
            ServerSocket serSocket = new ServerSocket (5001);
            
            Socket client = serSocket.accept();
            BufferedWriter w = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
            BufferedReader r = new BufferedReader(new InputStreamReader(client.getInputStream()));
            
            
            String UserName = "";
            
            while(true){
                
                if(UserName.equals("")){
                    UserName = r.readLine() + "(" + client.getInetAddress().getHostAddress() +")";
                    System.out.println("유저이름저장완료!");
                    continue;
                }
                
                String data = r.readLine().trim();
                
                if(data.equals("quit"))
                    break;
            
                w.write(UserName +" : " +  data + "\n");
                w.flush();
                
                
            }
            
            w.close();
            r.close();
            serSocket.close();
            client.close();
            
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
}
 
cs

ServerSocket  : 서버 소켓 생성 - ServerSocket(포트번호)
serSocket.accept() : 클라이언트 접솔을 기다림
BufferedWriter : 클라이언트에 보내기위해
BufferedReader : 클라이언트에서 보내온 걸 읽기위해
.write() : 클라이언트에 보낼 정보를 쓰기
.flush() : 버퍼를 비움
.readLine() : BufferedReader로 클라이언트에서 보내온 걸 한줄씩 읽음
.close() : 자원 해제




클라이언트


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
 
import javax.swing.plaf.synth.SynthSeparatorUI;
 
public class TcpClient {    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);    
        
        try {
            
            System.out.print("서버 아이피를 입력 하시오 ! : ");
            String ip = sc.nextLine();
                        
            Socket socket = new Socket( InetAddress.getByName(ip) , 5001);
                
            String UserName= "";
            BufferedWriter w = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            BufferedReader r = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            
            while(true){
                if(UserName.equals("")){
                    System.out.print("유저 이름 설정 : ");
                    String str = sc.next();
                    w.write(str + "\n");
                    w.flush();
                    
                    UserName= str;
                    continue;
                }
                
                    System.out.print("채팅할 말 : ");
                    String str = sc.next();
            
                    w.write(str + "\n");
                    w.flush();
                    
                    
                    if(str.equals("quit"))
                        break;
                    
                    
                    String data = r.readLine().trim();
                    System.out.println(data);
            }
            
            socket.close();
            w.close();
            r.close();
                        
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        
    }
}
 
cs


Socket : 서버와 연결하기위해 소켓 생성 - ip, port

InetAddress.getByName(ip) : InetAddress로 ip 관리

BufferedWriter : 서버에 보낼 정보를 쓰기위해

BufferedReader : 서버에 보내온 정보를 받기위해

.write() : 서버에 보낼 정보를 쓰기
.flush() : 버퍼를 비움
.readLine() : BufferedReader로 서버에서 보내온 걸 한줄씩 읽음
.close() : 자원 해제




결과 : 

서버

유저이름저장완료!    //클라이언트에서 보낸 유저이름을 저장


클라이언트

서버 아이피를 입력 하시오 ! : 0.0.0.0    //연결할 서버 아이피 주소

유저 이름 설정 : sime

채팅할 말 : Hi                //서버로 보냄

sime(192.168.0.12) : Hi       //서버에서 옴

채팅할 말 : 안녕?

sime(192.168.0.12) : 안녕?

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함