黑马程序员技术交流社区
标题:
socket问题
[打印本页]
作者:
邱成
时间:
2012-9-22 00:09
标题:
socket问题
本帖最后由 邱成 于 2012-9-22 14:28 编辑
java socket问题,client端连接server,client端通过输入流获取server传过来的一段话,并打印,完后Client端退出JVM,但如下代码Client端不能退出,请高手帮忙分析一下。谢谢!!
Server端部分代码:
try {
ServerSocket ss = new ServerSocket(6666);
while (true) {
Socket socket = ss.accept();
OutputStream os = socket.getOutputStream();
String data = "恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!"+
"恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!"+
"恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!";
System.out.println(data.length());
os.write(data.getBytes());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Client端部分代码:
BufferedInputStream bis=null;
Socket socket=null;
try {
socket=new Socket(InetAddress.getLocalHost(), 6666);
bis=new BufferedInputStream(socket.getInputStream());
byte[] buffer=new byte[1024];
int length;
while((length=bis.read(buffer, 0, buffer.length))!=-1){
String str=new String(buffer, 0, length);
System.out.println(str);
}
} catch (Exception e) {
// TODO: handle exception
}finally{
try {
bis.close();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.exit(0);
}
作者:
谭立文
时间:
2012-9-22 00:29
package com.wenfengkeji.heima;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args)
{
try {
ServerSocket ss = new ServerSocket(6666);
while (true) {
Socket socket = ss.accept();
OutputStream os = socket.getOutputStream();
String data = "恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!"+
"恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!"+
"恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!";
System.out.println(data.length());
os.write(data.getBytes());
os.close(); //关闭流资源就好了
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
作者:
汪小照
时间:
2012-9-22 00:38
你的服务端代码 红色标记为我修改的部分
Server端部分代码:
try {
ServerSocket ss = new ServerSocket(6666);
while (true) {
Socket socket = ss.accept();
OutputStream os = socket.getOutputStream();
String data = "恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!"+
"恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!"+
"恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!恭喜你,连接服务器成功!!";
System.out.println(data.length());
os.write(data.getBytes());
//在此句应加上一个结束标记
os.close(); //相当于给客户端发送了一个结束标记-1,此时当客户端读完服务端发送的数据后,再读到一个结束标记-1后,那么客户端的while语句就会结束,随之
//整个客户端也就结束了。还有一种方式:把os.close()改成os.shutdownoutput();道理是一样的。
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2