伙计们厌倦了这个客户端和服务器聊天程序PLZ帮助我 我的程序是编译和运行但问题是,当我试图将msg传递给服务器时,它无法正常工作..现在我做了什么更正...
服务器代码:
import java.io.*;
import java.net.*;
class serv
{
ServerSocket s;
Socket c;
DataInputStream dis;
DataOutputStream dos;
BufferedReader disi;
public serv()
{
try
{
s = new ServerSocket(2000,0,InetAddress.getLocalHost());
System.out.println("Server is Created");
c = s.accept();
System.out.println("Request Accepted");
}
catch(Exception e)
{
System.out.println(e);
}
}
public void talk()throws IOException,UnknownHostException
{
dis = new DataInputStream(c.getInputStream());
dos = new DataOutputStream(c.getOutputStream());
disi = new BufferedReader(new InputStreamReader(System.in));
while(true)
{
String str = new String(disi.readLine());
dos.writeUTF(str);
System.out.println(str);
}
}
public static void main(String args[])
{
try
{
serv c = new serv();
c.talk();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
客户代码:
import java.io.*;
import java.net.*;
class clien
{
Socket c;
DataInputStream dis;
BufferedReader disi;
DataOutputStream dos;
public clien()throws IOException,UnknownHostException
{
c=new Socket(InetAddress.getLocalHost(),2000);
System.out.println("Request is sended");
}
public void talk()throws IOException,UnknownHostException
{
try
{
dis=new DataInputStream(c.getInputStream());
dos=new DataOutputStream(c.getOutputStream());
disi=new BufferedReader(new InputStreamReader(System.in));
while(true)
{
String str=new String(disi.readLine());
dos.writeUTF(str);
System.out.println(str);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String args[])
{
try
{
clien c=new clien();
c.talk();
}
catch(Exception e){ }
}
}
答案 0 :(得分:0)
有很多问题。
好像你正试图做某种类似的协议:
客户端连接到服务器 客户端向服务器发送消息 服务器收到消息
点对点类型系统。不确定您是否期望将服务器视为另一个客户端(您在其中键入消息以将其发送到客户端),但问题是,当连接建立时,客户端和服务器都进入循环。在这个循环中,你只能关注一件事。
客户端: main(String []) - >连接 - >从用户读取输入(循环) 启动程序 - >连接 - >开始从服务器收听信息
服务器: main(String []) - >接受连接 - >从用户读取输入(循环)
如果您希望客户端从服务器接收信息并且能够发送信息,则需要2个线程。
static Socket s;
static DataOutputStream out;
static DataInputStream in;
public static void main(String[] args) {
try {
s = new Socket("host", 2000);
out = new DataOutputStream(s.getOutputStream());
in = new DataInputStream(s.getInputStream());
new Thread(new Runnable() {
public void run() {
Scanner scanner = new Scanner(System.in);
String input;
while(!(input = scanner.nextLine()).equals("EXITPROGRAM")) {
out.writeUTF(input); //sends to client
}
}
}).start();
while(true) {
String infoFromServer = in.readUTF();
//you can print to console if you want
}
}catch(Exception e) { }
}
现在,这将允许客户端从用户(从控制台)接收输入并从服务器接收数据。您可以为您的服务器使用相同的结构,如果这是您的目的。