我的服务器程序
import java.net.*;
import java.io.*;
public class MultiServe implements Runnable
{
static ServerSocket ss;
static Socket s;
public void run()
{
String name=Thread.currentThread().getName();
for(;;)
{
try
{
System.out.println("thread:"+name+"ready to accept");
s=ss.accept();
System.out.println("thread:"+name+" accepted");
PrintStream ps=new PrintStream(s.getOutputStream());
ps.println("Thread"+name+"contacted You");
String sz,str1;
BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
BufferedReader bk=new BufferedReader(new InputStreamReader(System.in));
while(true)
{
while((sz=br.readLine())!=null)
{
System.out.println(sz);
str1=bk.readLine();
ps.close();
br.close();
bk.close();
s.close();
}
}
}catch(Exception e){}
}
}
public static void main(String args[]) throws IOException
{
MultiServe ms=new MultiServe();
ss=new ServerSocket(8080);
Thread t=new Thread(ms,"one");
Thread t1=new Thread(ms,"two");
t.start();
t1.start();
}
}
我的客户程序
import java.net.*;
import java.io.*;
public class MultiClient
{
public static void main(String args[])throws Exception
{
Socket s=new Socket("localhost",8080);
BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
String str,str1;
DataOutputStream ds=new DataOutputStream(s.getOutputStream());
BufferedReader bk=new BufferedReader(new InputStreamReader(System.in));
while(!(str=bk.readLine()).equals("exit"))
{
ds.writeBytes(str+"\n");
str1=br.readLine();
System.out.println(str1);
}
ds.close();
bk.close();
br.close();
s.close();
}
}
套接字编程的新手,但我可以连接但无法通信。 我不知道它是否已经陷入僵局。 两者都在连接,但没有收到任何消息。
这是因为您的try catch块.. try块内肯定有一些错误。 您有两个线程在同一套接字上等待。 当有人连接时,两者都试图接受它。
您的代码不正确。
客户端中DataOutputStream
writeBytes(String)
方法将字符串写为字节数组,其中,服务器上BufferedReader
的readLine()
方法需要一行文本。 在这里,您可以在客户端中使用PrintStream
。
如果要继续在此套接字上进行读取,则无法在每次读取后在服务器上关闭流。
请尝试以下代码以达到预期的效果:
服务器:
public class Server implements Runnable
{
static ServerSocket ss;
static Socket s;
public void run()
{
String name=Thread.currentThread().getName();
for(;;)
{
try
{
System.out.println("thread:"+name+"ready to accept");
s=ss.accept();
System.out.println("thread:"+name+" accepted");
PrintStream ps=new PrintStream(s.getOutputStream());
ps.println("Thread"+name+"contacted You");
String sz,str1;
BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
BufferedReader bk=new BufferedReader(new InputStreamReader(System.in));
while((sz=br.readLine())!=null)
{
System.out.print(sz+"\nYour Msg:");
str1=bk.readLine();
ps.println(str1);
}
ps.close();
br.close();
bk.close();
s.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
public static void main(String args[]) throws IOException
{
Server ms=new Server();
ss=new ServerSocket(8080);
Thread t=new Thread(ms,"one");
//Thread t1=new Thread(ms,"two");
t.start();
//t1.start();
}
}
客户:
public class Client
{
public static void main(String args[])throws Exception
{
Socket s=new Socket("localhost",8080);
BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
String str,str1;
PrintStream ps = new PrintStream(s.getOutputStream());
BufferedReader bk=new BufferedReader(new InputStreamReader(System.in));
System.out.print(br.readLine()+"\nEnter:");
while(!(str=bk.readLine()).equals("exit"))
{
ps.println(str);
str1=br.readLine();
System.out.print(str1+"\nEnter:");
}
ps.close();
bk.close();
br.close();
s.close();
}
}