站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题求助关于套接字连接!在线

求助关于套接字连接!在线

摘要: 求助关于套接字连接!在线


我写的一个简单套接字连接服务器可以启动,但是客户程序一启动的时候就卡在那里往下走不了了,不知道怎么回事情,请大家帮我看看代码有什么问题没有.谢谢各位了

import java.net.*;

public class Server {
public Server() {
try{
ServerSocket server=new ServerSocket(8189);
System.out.println("waiting");
while(true){
Socket s=server.accept();
SocketThread st=new SocketThread(s);
st.start();
}
}catch(Exception e){
e.printStackTrace();
}
}

public static void main(String[] args) {
Server server = new Server();
}
}


import java.net.*;
import java.io.*;

public class SocketThread extends Thread {
private Socket socket;
public SocketThread(Socket s) {
socket=s;
}
public void run(){
try{
String s;
BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out=new PrintWriter(socket.getOutputStream());
System.out.println("已经建立了连接");
out.println("你已经连接到服务器");
while(true){
s=in.readLine();
if(s!=null){
if(s.equalsIgnoreCase("exit"))
break;
System.out.println(s);
}
}
out.close();
in.close();
socket.close();
}catch(Exception e){
e.printStackTrace();
}
}
}


import java.net.*;
import java.io.*;

public class Client {
public Client() {
}
public static void main(String[] args){
try{
Socket socket=new Socket(InetAddress.getByName("localhost"),8189);
System.out.println(socket.isConnected());
BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out=new PrintWriter(socket.getOutputStream(),true);
String s=in.readLine();
System.out.println(s);
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
while(true){
System.out.println("请输入消息");
String Keyboard=br.readLine();
out.println(Keyboard);
if(Keyboard.equalsIgnoreCase("exit"))
break;
}
}catch(Exception e){
e.printStackTrace();
}
}
}


客户端走到String s=in.readLine();就走不下去了,我server端输出了一个String啊,不知道为什么它收不到!谢谢各位帮助!



public class Server {
public Server() {
try{
ServerSocket server=new ServerSocket(8189);
System.out.println("waiting");

while(true){
Socket s=server.accept();
BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintWriter out=new PrintWriter(s.getOutputStream());
System.out.println("已经建立了连接");
out.println("你已经连接到服务器");
SocketThread st=new SocketThread(s);
st.start();
}
}catch(Exception e){
e.printStackTrace();
}
}

public static void main(String[] args) {
Server server = new Server();
}
}

out.println("你已经连接到服务器"); 应该放在Server.java里面



楼上兄弟,谢了
原因找到了,是因为我out.println()没有flush
我是在accept()新建一个线程来接收请求的,所以不能放在server里,如果那样,就只能一次响应一个用户了
鉴于我也解决了一部分,自己给自己散点儿分


哈哈~ 那不行的~! csdn怎么可能留下这么大的bug


太失败了,楼上兄弟解答一下我的疑问,是没有flush()的原因吗?那为什么书上没有flush一样运行?


放在server里可以响应多个用户的
死循环accept啊
放SERVER里面好像就不要FLUSH了


问题在于你的in.readLine();这里
这个一直要遇到换行符或结束符才返回,你如果只write别的字符,而不写/n或close的话,不出错就永远不会返回,你可以write一个串后面加一个/n试试


哦,小弟恍然大悟
回hasenmai兄弟,放死循环同一时刻也只能响应一个客户
如果不多线程,就不能同时响应,我这么认为
谢谢楼上兄弟


回zh_ua兄弟,我是用的println()方法,它应该自己就加一个/n啊


问题是我加一个out.flush()就一切OK,把他注释掉就走不下去


用NIO可以不用多线程


虽然解决了,但不知道为什么,心有不甘啊


↑返回目录
前一篇: 问个在struts框架中request取值的问题
后一篇: 在一个类的开始和结束时候处理事情,应该怎么做?