因此,我正在製作一個簡單的聊天應用程序來獲得Java Networking中的kick-start。我正在使用TCP/IP。問題在於客戶端不從服務器發送/接收數據,也沒有服務器。我在做錯了什麼? 這裏是我的服務器類:在java中使用TCP/IP的服務器客戶端。無法發送/接收消息
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
public class Server implements Runnable {
static InetAddress address;
static ArrayList<Integer> clients=new ArrayList<Integer>();
static ArrayList<Socket> s=new ArrayList<Socket>();
static String message;
static byte[] mess=new byte[2048];
static DataOutputStream toClient;
public Server(InetAddress address){
this.address=address;
}
public static void main(String[] args) throws IOException
{
ServerSocket socket=new ServerSocket(8000);
System.out.println("Server started on port 8000");
while(true)
{
Socket socketNew=socket.accept();
s.add(socketNew);
address=socketNew.getInetAddress();
System.out.println("connected to client at address: "+address);
InputStream is=socketNew.getInputStream(); //receiving from client
InputStreamReader isr=new InputStreamReader(is);
BufferedReader br=new BufferedReader(isr);
message=br.readLine();
Server server=new Server(address);
//new Thread(server).start();
}
}
public void run() {
for(Socket socket:s) //to send message to all clients
{
OutputStream os;
try {
os = socket.getOutputStream();
OutputStreamWriter osw=new OutputStreamWriter(os);
BufferedWriter bw=new BufferedWriter(osw);
bw.write(message);
bw.flush();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
這裏是我的客戶端類的發送和接收功能:
private void send_data() {
try {
OutputStream os = socket.getOutputStream();
OutputStreamWriter osw=new OutputStreamWriter(os);
BufferedWriter bw=new BufferedWriter(osw);
String sendMessage=this.getName()+": "+textField.getText();
bw.write(sendMessage);
bw.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
private void receive_data()
{
try {
InputStream is = socket.getInputStream();
InputStreamReader isr=new InputStreamReader(is);
BufferedReader br=new BufferedReader(isr);
String toConsole=br.readLine();
console(toConsole);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
我不確定,但是不應該將ServerSocket綁定到IP上嗎?嘗試使用獲取IP地址的ServerSocket構造函數。 – Michael
您使用未綁定的ServerSocket綁定。這一個不會要求。 – Learner