아니, 아무리 해봐도 계속 한글이 깨지는겁니다. 띄어쓰기가 잘못됬나? 하면서 "\n"도 넣어보고 "\r\n"도 넣어보고 했는데, 안됨. 그리고 파일 읽기를 잘못했나? 하고 그냥 따옴표 안에 직접 한글을 쳐서 넣어도 안되는거에요. 인터넷에 쳐보니, 기본적으로 java는 utf-16을 쓴다고 하나봐요? 그런데, internet explorer는 utf-8을 쳐야되나봐. 한참 찾았네 정말~
참고: blog.daum.net/mycomputerworld/219
Socket 에서 한글 Encoding문제
안드로이드 프로그래밍 경험은 없지만. 기본 Java 지식으로 답을 드리겠습니다. 1. 일단 new String(text.getBytes(fromEncode), ToEncode) 구문은 잊어주세요. 이 방식은 Java 초창기 시절 tomcat 같은데서 HTTP..
blog.daum.net
in=new BufferedReader(new InputStreamReader(sock.getInputStream(), "EUC-KR"));
이렇게 "EUC-KR"이 들어가야, 전송이 원활하게 된다 이말이야~
package javaweb1;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.*;
public class JavaWeb1
{
public static void main(String[] args)
{
Socket sock=null;
try{
ServerSocket servSock=new ServerSocket(80);
while(true)
{
Thread.sleep(500);
sock=servSock.accept();
myThread thread=new myThread(servSock, sock);
thread.start();
System.out.println(Thread.activeCount());
}
}
catch(Exception e){
System.out.println("exception1");
e.printStackTrace();
}
}
}
class myThread extends Thread
{
ServerSocket servSock=null;
Socket sock=null;
BufferedReader in=null;
BufferedWriter out=null;
int max_size = 2048;
String recvStr;
String compareStr = null;
boolean isChrome=false;
char[] recvBuffer = new char[max_size];
myThread(ServerSocket servSock,Socket sock)
{
this.servSock=servSock;
this.sock=sock;
}
public void run()
{
System.out.println("thread start");
try
{
//여기가 잘못되었었음.
//in=new BufferedReader(new InputStreamReader(sock.getInputStream()));
in=new BufferedReader(new InputStreamReader(sock.getInputStream(), "EUC-KR"));
//out=new BufferedWriter(new OutputStreamWriter(sock.getOutputStream()));
out=new BufferedWriter(new OutputStreamWriter(sock.getOutputStream(), "EUC-KR"));
in.read(recvBuffer, 0, max_size);
recvStr=new String(recvBuffer);
System.out.println("리시브 데이터");
System.out.println(recvBuffer);
if(recvStr.contains("GET")==false){
SendMSG.SendErrorMSG(out);
System.out.println("not GET");
sock.close();
}
int beginIndex=recvStr.indexOf("/");
int endIndex=recvStr.indexOf(" HTTP", 4);
//System.out.println("시작 "+beginIndex+" 끝:"+endIndex);
compareStr=recvStr.substring(beginIndex+1, endIndex);
SendMSG.SendData(compareStr, out);
in.close();
out.close();
sock.close();
}
catch(Exception e)
{
System.out.println("exception2");
e.printStackTrace();
}
}
}
class SendMSG
{
static void SendData(String filename, BufferedWriter out)
{
String protocol="HTTP/1.0 200 OK\r\n";
String servName="Server:simple web server\r\n";
String cntLen="Content-length:2048\r\n";
String cntType="Content-type:text/html\r\n\r\n";
String content="";
String buf=null;
try{
//out.write(protocol+servName+cntType);
}catch(Exception e){
System.out.println("exception3");
e.printStackTrace();
}
File fp=new File(filename);
BufferedReader fileReader=null;
try
{
if(filename.length()==0)
filename="index.html";
else if(filename.equals("favicon.ico"))
filename="index.html";
fileReader=new BufferedReader(new FileReader(filename));
while((buf=fileReader.readLine())!=null)
content=content.concat(buf+"\n");
//out.write("<html><head><title>NETWORK</title></head></html>");
System.out.println("읽은내용: "+content);
out.write(protocol+servName+cntType+"im your father 나는 니 아빠다");
out.flush();
fileReader.close();
}
catch(Exception e)
{
System.out.println("exception4");
e.printStackTrace();
}
}
static void SendErrorMSG(BufferedWriter out)
{
String protocol="HTTP/1.0 400 Bad Request\r\n";
String servName="Server:simple web server\r\n";
String cntLen="Content-length:2048\r\n";
String cntType="Content-type:text/html\r\n\r\n";
String content="<html><head><title>NETWORK</title></head></html>";
try{
out.write(protocol+servName+cntType+content);
out.flush();
}
catch(Exception e){
System.out.println("exception5");
e.printStackTrace();
}
}
}
'소켓프로그래밍' 카테고리의 다른 글
linux arp 요청 & 응답 받기 (1) | 2024.03.06 |
---|---|
리눅스 udp패킷 전송 (0) | 2024.02.03 |
chrome http web프로그래밍 에러 (failed) net::ERR_CONTENT_LENGTH_MISMATCH (0) | 2020.09.24 |
cpp 간단한 web서버 (0) | 2020.09.23 |
JAVA 간단한 web서버 만들기 (0) | 2020.09.23 |