贝尔格里屌斯的专栏

看了别人的代码,然后按照自己的理解写了一个,可以运行,,和大家分享~

觉得socket不难,多看多做才是提高的方式。

以下是代码:

服务端:

package lance.socket_2;import java.io.*;import java.net.*;//练习一下而已public class ServerTest {public static void main(String[] args) throws IOException {ServerSocket server = new ServerSocket(965);while (true) {// 在这里一直接收Socket s_socket = server.accept();// 得到服务端的socketinvoke(s_socket);// 放到一个线程里面去跑}}public static void invoke(final Socket s_socket) {// new Thread(Runnable接口的实例).start();new Thread(new Runnable() {@Overridepublic void run() {BufferedReader br = null;PrintWriter pw = null;try {br = new BufferedReader(new InputStreamReader(s_socket.getInputStream()));pw = new PrintWriter(new OutputStreamWriter(s_socket.getOutputStream()), true);// 写一句回去的时候用,true 是为了即时刷新String msg = "";while (msg.equals("bye") == false) {msg = br.readLine();// 获得一个消息System.out.println("来自客户端:" + msg);// 给客户端返回一条消息pw.println("来自服务端:已经收到你的消息→"+msg);pw.flush();}// 关闭一下,socket也要关闭一下br.close();pw.close();s_socket.close();} catch (IOException e) {e.printStackTrace();}}}).start();}}客户端:

package lance.socket_2;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;public class ClientTest {public static void main(String[] argsStrings) throws UnknownHostException,IOException {Socket socket = new Socket("localhost", 965);BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);BufferedReader input = new BufferedReader(new InputStreamReader(System.in));String msg = "";//不可以设置为null否则出错while (msg.equals("bye") == false) {msg = input.readLine();// 输入一个信息pw.println(msg);// 通过socket发送过去pw.flush();System.out.println(br.readLine());// 读取服务端的反馈信息}//好孩子关闭一下br.close();pw.close();socket.close();}}·收到bye之后,服务器就停止了。

·注意可能出现端口被占用的情况。

·String不能是null,使用equals方法就会出现空指针异常。

我不敢说我明天便可以做一个快乐的人,面朝大海春暖花开。

贝尔格里屌斯的专栏

相关文章:

你感兴趣的文章:

标签云: