日期:2014-05-20  浏览次数:20752 次

关于JAVA SOCKET编程
请问在JAVA中是通过什么方式实现SOCKET编程的?我看了个例子,上面这样写的:
out   =   new   PrintWriter(socket.getOutputStream(),true);
out.println(str);
JAVA中SOCKET编程发送数据的实现方法后面的STRING类型,难道我只能把组合好的BYTE[]转成STRING发送出去吗?这样对吗?

------解决方案--------------------
ObjectOutputStream 可以发送String
------解决方案--------------------
PrintWriter是包装过的OutputStream,你直接用Outputstream就是发送byte的。
(初学JAVA,还是等高手来确定下)
------解决方案--------------------
这是一个用Socket建立个最简单的聊天程序Java、Socket、网络编程、聊天

/*一个作为Server*/
import java.io.*;
import java.net.*;
public class MyServer{
public static void main(String[] args)
throws IOException{
ServerSocket s=new ServerSocket(8658);
System.out.println( "开始: "+s);
try{
Socket socket=s.accept();
try{
System.out.println( "连接接受 "+socket);
BufferedReader in=new BufferedReader(new InputStreamReader
(socket.getInputStream()));
PrintWriter out=new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())),true);
while(true){
String str=in.readLine();
if(str.equals( "q ")) break;
System.out.println( "对方说: "+str);
BufferedReader is=new BufferedReader(new InputStreamReader(System.in));
String input=new String();
input=is.readLine().trim();
out.println(input);
System.out.print( "我说: ");
out.flush();
}
}
finally{
System.out.println( "关闭.... ");
socket.close();
}
}
finally{
s.close();
}
}
}

/*一个作为Client*/
import java.io.*;
import java.net.*;
public class MyClient{
public static void main(String[] args)
throws IOException{
InetAddress addr=InetAddress.getByName( "127.0.0.1 ");
System.out.println( "地址= "+addr);
Socket socket=new Socket(addr,8658);
try{
System.out.println( "socket= "+socket);
BufferedReader is=new BufferedReader(new InputStreamReader(System.in));
PrintWriter out=new PrintWriter(socket.getOutputStream(),true);
for(;;){
System.out.print( "我说: ");
String input=new String();
input=is.readLine().trim();
out.println(input);
if(input.equals( "q ")) break;
BufferedReader in=new BufferedReader(new InputStreamReader
(socket.getInputStream()));
String str=in.readLine();
System.out.println( "对方说: "+str);
out.flush();
}

}
finally{
System.out.println( "关闭 ");
socket.close();
}
}
}


------解决方案--------------------
socket.getOutputStream(),这个是从Socket返回的字节流,
在这个基础上,你可以包装任意的输出流类,来实现你需要的功能,
传送字节数组,
DataOutputStream类
write(byte[] b, int off, int len)
将指定字节数组中从偏移量 off 开始的 len 个字节写入基础输出流。