锁定老帖子 主题:java socket
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-03-10
最后修改:2010-03-11
服务器端: import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; public class Server { /** 端口号 */ public static final int PORT = 9999; public static void main(String[] args) { System.out.println("服务器...\n"); Server ser = new Server(); ser.sock(); } public void sock() { try { ServerSocket server = new ServerSocket(PORT); while (true) { // 一旦有堵塞, 则表示服务器与客户端获得了连接 Socket client = server.accept(); // 处理这次连接 new PServer(client); } } catch (Exception e) { System.out.println("服务器异常: " + e.getMessage()); } } private class PServer implements Runnable { private Socket socket; public PServer(Socket sock) { socket = sock; new Thread(this).start(); } public void run() { try { // 读取客户端数据 DataInputStream input = new DataInputStream(socket.getInputStream()); // 向客户端发送数据 DataOutputStream out = new DataOutputStream(socket.getOutputStream()); // 读取客户端数据 System.out.println("客户端发过来的内容: " + input.readUTF()); System.out.print("请输入: \t"); // 发送键盘输入的一行 String s = new BufferedReader(new InputStreamReader(System.in)).readLine(); out.writeUTF(s); input.close(); out.close(); } catch (Exception e) { System.out.println("服务器 run 异常: " + e.getMessage()); } } } } 客户端: import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.net.Socket; public class Client { /** 端口号 */ public static final int PORT = 9999; /** ip 地址 */ public static final String IP = "localhost"; public static void main(String[] args) { System.out.println("客户端..."); Socket socket = null; try { System.out.println("当接收到服务器端字符为 \"好\" 的时候, 客户端将终止\n"); while (true) { // 创建一个流套接字并将其连接到指定主机上的指定端口号 socket = new Socket(IP, PORT); // 读取服务器端数据 DataInputStream input = new DataInputStream(socket.getInputStream()); // 向服务器端发送数据 DataOutputStream out = new DataOutputStream(socket.getOutputStream()); System.out.print("请输入: \t"); String str = new BufferedReader(new InputStreamReader(System.in)).readLine(); out.writeUTF(str); String ret = input.readUTF(); System.out.println("服务器端返回过来的是: " + ret); // 如接收到 "好" 则断开连接 if ("好".equals(ret)) { System.out.println("客户端将关闭连接"); Thread.sleep(500); break; } } } catch (Exception e) { System.out.println("客户端异常: " + e.getMessage()); } finally { if (socket != null) { try { socket.close(); } catch (Exception e) { socket = null; System.out.println("客户端 finally 异常: " + e.getMessage()); } } } } } 先启动 服务器端,再启动客户端, 两者可以相互通信, 但这个小例子只是做了字符串的通信. 有时候真的挺烦 Java 的 IO 的, 一堆的 API, 看到就头疼. 有时候代码写得多了, 真觉得写代码看 API 比上网查还来得快些, 我不用太关注底层, 所以也不是整天看源码. 网上搜到的大多又都是 copy 文. 没劲... 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-03-10
貌似现在都用NIO了 可以试试
|
|
返回顶楼 | |
发表时间:2010-03-10
最近也是在研究tcp传输,比较麻烦的在于如何制定通信双方的协议。。
|
|
返回顶楼 | |
发表时间:2010-03-11
sw1982 写道 最近也是在研究tcp传输,比较麻烦的在于如何制定通信双方的协议。。
应用协议吧? 根据你的需求,分析交互过程 |
|
返回顶楼 | |
发表时间:2010-03-11
谁能告诉我这个为什么能上主页?
|
|
返回顶楼 | |
发表时间:2010-03-11
楼主应该比较强了, 在公司没事, 随便看一下api, 就写出了 ? 然后又被推荐到主页?
|
|
返回顶楼 | |
发表时间:2010-03-11
sw1982 写道 最近也是在研究tcp传输,比较麻烦的在于如何制定通信双方的协议。。
我比较喜欢你的图像 |
|
返回顶楼 | |
发表时间:2010-03-11
我从来没想过上主页.. 谢谢
|
|
返回顶楼 | |
发表时间:2010-03-11
应该看看NIO了。
|
|
返回顶楼 | |
发表时间:2010-03-11
可以用mina框架
|
|
返回顶楼 | |