小弟最近在研究Socket编程,按照网上的例子写了如下代码模拟客户端功能:
package jack.netprogram;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;public class TalkServer {
public static void main(String args[]){
try {
ServerSocket server = new ServerSocket(1803);
Socket socket = server.accept();
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
PrintWriter os = new PrintWriter(socket.getOutputStream());
BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String readline = null;
System.out.println("Client:"+is.readLine());
readline = sin.readLine();
while(!readline.equals("bye")){
os.println(readline);
os.flush();
System.out.println("Server:" + readline);
System.out.println("Client:" + is.readLine());
readline = sin.readLine();
}
os.close();
is.close();
socket.close();
server.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
但却达不到我想要的要求,即在一个程序里用键盘模拟客户端发送数据给服务器,服务器接收并显示出收到的数据再logcat里!!!是不是不能再同一个程序里模拟客户服务器的功能。小弟最近开始Socket编程,求达人指导!
package jack.netprogram;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;public class TalkServer {
public static void main(String args[]){
try {
ServerSocket server = new ServerSocket(1803);
Socket socket = server.accept();
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
PrintWriter os = new PrintWriter(socket.getOutputStream());
BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String readline = null;
System.out.println("Client:"+is.readLine());
readline = sin.readLine();
while(!readline.equals("bye")){
os.println(readline);
os.flush();
System.out.println("Server:" + readline);
System.out.println("Client:" + is.readLine());
readline = sin.readLine();
}
os.close();
is.close();
socket.close();
server.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
但却达不到我想要的要求,即在一个程序里用键盘模拟客户端发送数据给服务器,服务器接收并显示出收到的数据再logcat里!!!是不是不能再同一个程序里模拟客户服务器的功能。小弟最近开始Socket编程,求达人指导!
///然后,后面发数据吧
当然可以在一个程序同时启动服务端和客户端,你分两个线程就可以了。一个线程用来创建ServerSocket,另外一个线程用来创建Socket就行。
Socket client = new Socket("localhost",1083);
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Test { public static void main(String[] args) throws Exception {
new TalkServer().start();
Thread.sleep(100);//调整时间,让服务端准备好
new Client().start();
}
static class TalkServer extends Thread { public void run() {
try {
ServerSocket server = new ServerSocket(1803);
Socket socket = server.accept();
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
PrintWriter os = new PrintWriter(socket.getOutputStream());
BufferedReader is = new BufferedReader(new InputStreamReader(
socket.getInputStream())); String readline = null;
System.out.println("Client:" + is.readLine());
readline = sin.readLine();
while (!readline.equals("bye")) {
os.println(readline);
os.flush();
System.out.println("Server:" + readline);
System.out.println("Client:" + is.readLine()); readline = sin.readLine();
}
os.close();
is.close();
socket.close();
server.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} static class Client extends Thread {
public void run() {
try{
Socket client = new Socket("localhost", 1803);
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
PrintWriter os = new PrintWriter(client.getOutputStream());
BufferedReader is = new BufferedReader(new InputStreamReader(client.getInputStream()));
String readline = sin.readLine();
os.println(readline);
os.flush();
System.out.println("Server:" + is.readLine());
}catch(Exception ex){ex.printStackTrace();}
}
}
}
你这个程序,客户端和服务端放在一起有点小问题,不过应当是可以通信的。