import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerSocketTest {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(7777); //파라미터는 포트번호
System.out.println("서버가 접속을 기다립니다");
// accept()메소드는 Client에서 연결요청이 올때까지 계속 기다린다
// 연결요청이 오면 Socket객체를 생성해서 Client와 Socket과 여결
Socket socket = server.accept();
//--------------------------------------------------
// 이 이후는 클라이언트와 연결된 후의 작업을 진행하면 된다
System.out.println("접속한 클라이언트 정보");
System.out.println("주소: "+socket.getInetAddress());
// Client에 메세지 보내기
// 접속한 Socket의 getOutputStream()을 이용하여 구한다.
OutputStream out = socket.getOutputStream();
ObjectOutputStream oos =new ObjectOutputStream(out);
// writeUTF메소드 쓰고싶어서 ObjectOutputStream으로 선언
// DataOutputStream(보조스트림도 사용ㄱㄴ. 적절한 사이즈로 자료형에 맞춰 ...)
oos.writeUTF("어서오세요..."); //메세지 보내기
System.out.println("메세지를 보냈습니다");
oos.close();
server.close();
}
}
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.function.ObjIntConsumer;
public class ClientSocketTest {
public static void main(String[] args) throws UnknownHostException, IOException {
String serverIp = "127.0.0.1";
// 자기자신 컴퓨터(로컬호스트)를 나타내는 방법
// IP : 127.0.0.1
// 호스트이름 : localhost
System.out.println(serverIp+"서버에 접속중입니다....");
//소켓을 생성해서 서버에 연결을 요청한다
Socket socket = new Socket(serverIp,7777);
//연결이 되면 이후의 명령이 실행된다
System.out.println("연결되었습니다");
// 서버에서 보내온 메시지 받기
// 메세지를 받기위해 InputStream객체를 생성한다.
// Socket의 getInputStream() 메서드 이용
InputStream is = socket.getInputStream();
ObjectInputStream ois = new ObjectInputStream(is);
//서버로 부터 받은 메세지 출력하기
System.out.println("받은 메세지: "+ois.readUTF());
System.out.println("연결종료");
ois.close();
}
}
package kr.or.ddit.tcp;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerSocketTest {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(7777);
System.out.println("서버가 접속을 기다립니다");
//accept()메소드는 Client에서 연결요청이 올때까지 계속 기다린다
// 연결요청잉 ㅗ면 Socket객체를 생성해서 Client와 Socket과 여결
Socket socket = server.accept();
//--------------------------------------------------
// 이 이후는 클라이언트와 연결된 후의 작업을 진행하면 된다
System.out.println("접속한 클라이언트 정보");
System.out.println("주소: "+socket.getInetAddress());
// Client에 메세지 보내기
// 접속한 Socket의 getOutputStream()을 ㅣㅇ용하여 구한다.
OutputStream out = socket.getOutputStream();
ObjectOutputStream oos =new ObjectOutputStream(out);
oos.writeUTF("어서오세요..."); //메세지 보내기
System.out.println("메세지를 보냈습니다");
oos.close();
server.close();
}
}
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.function.ObjIntConsumer;
public class ClientSocketTest {
public static void main(String[] args) throws UnknownHostException, IOException {
String serverIp = "127.0.0.1";
// 자기자신 컴퓨터(로컬호스트)를 나타내는 방법
// IP : 127.0.0.1
// 호스트이름 : localhost
System.out.println(serverIp+"서버에 접속중입니다....");
//소켓을 생성해서 서버에 연결을 요청한다
Socket socket = new Socket(serverIp,7777);
//연결이 되면 이후의 명령이 실행된다
System.out.println("연결되었습니다");
// 서버에서 보내온 메시지 받기
// 메세지를 받기위해 InputStream객체를 생성한다.
// Socket의 getInputStream() 메서드 이용
InputStream is = socket.getInputStream();
ObjectInputStream ois = new ObjectInputStream(is);
//서버로 부터 받은 메세지 출력하기
System.out.println("받은 메세지: "+ois.readUTF());
System.out.println("연결종료");
ois.close();
}
}
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Scanner;
// 소켓을 통해 메세지를 보내는 역할을 담당하는 스레드
public class Sender extends Thread {
private Scanner scan;
private String name;
private DataOutputStream dos;
public Sender(Socket socket) {
name = "["+socket.getInetAddress()+" : "
+ socket.getLocalPort()+"]";
scan = new Scanner(System.in);
try {
dos = new DataOutputStream(socket.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void run() {
while(dos!=null) {
try {
dos.writeUTF(name+" >>> "+scan.nextLine());
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
import java.io.DataInputStream;
import java.io.IOException;
import java.net.Socket;
// 소켓에서 메세지를 받아서 화면에 출력하기 위한 스레드 클래스
public class Receiver extends Thread{
private DataInputStream dis;
public Receiver(Socket socket) {
try {
dis = new DataInputStream(socket.getInputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void run() {
while(dis != null) {
try {
System.out.println(dis.readUTF());
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
TcpFileServer.java
TcpFileClient.java
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class UdpServer {
private DatagramSocket ds;
private DatagramPacket dp;
private byte[] msg; //패킷 송수신을 위한 바이트 배열 선언
public UdpServer(int port) {
try {
ds = new DatagramSocket(port);
} catch (SocketException e) {
e.printStackTrace();
}
}
public void start() throws IOException {
while(true) {
// 데이터를 수신하기 위한 패킷을 생성한다
msg = new byte[1];
dp = new DatagramPacket(msg, msg.length);
System.out.println("패킷 수신 대기중");
// 패킷을 통해 데이터를 수신한다
ds.receive(dp);
System.out.println("패킷수신 완료");
// 수신한 패킷으로부터 client의 ip주소와 port를 얻는다
InetAddress iAddr = dp.getAddress();
int port = dp.getPort();
// 서버의 현재시간을 시분초 형태([hh:mm:ss])로 반환한다.
SimpleDateFormat sdf = new SimpleDateFormat("[hh:mm:ss]");
String time = sdf.format(new Date());
msg = time.getBytes(); // 시간 문자열을 byte배열로 변환한다
// 패킷을 생성해서 client에게 전송(send)한다
dp = new DatagramPacket(msg, msg.length,iAddr,port);
ds.send(dp); // 전송시작
}
}
}
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class UdpClient {
private DatagramSocket ds;
private DatagramPacket dp;
private byte[] msg; // 데이터가 저장될 공간으로 byte배열을 생성
public UdpClient() {
try {
msg = new byte[100];
// 소켓객체 생성(명시하지 않으면 포트번호는 이용가능한 임의의 포트번호로 할당됨)
ds = new DatagramSocket();
} catch (SocketException e) {
e.printStackTrace();
}
}
public void start() {
try {
InetAddress serverAddr = InetAddress.getByName("192.168.36.2");
dp = new DatagramPacket(msg, 1, serverAddr, 7777);
ds.send(dp); // 전송
dp = new DatagramPacket(msg, msg.length);
ds.receive(dp); // 수신
System.out.println("현재 서버시간 => "+new String(dp.getData()));
} catch (IOException e) {
e.printStackTrace();
}finally {
ds.close();
}
}
}