锁定老帖子 主题:java socket
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-03-11
cloud21 写道 应该看看NIO了。
Java 编程思想 讲 IO 的那一章只看了一点点, 确实该全看完的...感谢提醒 |
|
返回顶楼 | |
发表时间:2010-03-11
为什么会上主页?
|
|
返回顶楼 | |
发表时间:2010-03-12
最后修改:2010-03-12
为何我经过输入三次通信就报错???
java.net.SocketException: Connection reset by peer: socket write error |
|
返回顶楼 | |
发表时间:2010-03-15
回复:
w 服务器港:w 回复: w 客户端异常Connection reset by peer: socket write error 事不过三吗? |
|
返回顶楼 | |
发表时间:2010-03-16
怎么运行呢?
|
|
返回顶楼 | |
发表时间:2010-05-15
服务器端参考着你的代码,客户端我用delphi来写,客户端发一个文件名(server上带路径),为什么在客户端接受到的是乱吗呢?不管中文、英文、全角斗角等,都会乱码,客户端代码如下:
buf : array [1..8192] of char; freecount:int64; fileStream:TFileStream; begin s := socket.ReceiveText; if Pos(FILE_SIZE,s) <> 0 then begin //接受文件大小 filesize := StrToInt(Trim(Copy(s,12,Length(s)))); caption := '文件大小:' + IntToStr(filesize); end else begin //接受文件流 caption := '正在接受数据流...'; //接受文件保存 fileStream := TFileStream.Create(edit4.Text,fmCreate or fmOpenWrite); //计算出剩下字节数 freecount := filesize - readcount; if sizeOf(buf) < freecount then begin //满一块则写一块 //读取流 //socket.ReceiveBuf(buf,sizeOf(buf)); //readcount := readcount + sizeOf(buf); //写入流 //filestream.WriteBuffer(buf,filesize); end else begin //不满一块则写剩余字节数 //读取流 socket.ReceiveBuf(buf,freecount); //写入流 filestream.WriteBuffer(buf,filesize); end; caption := '数据流接受完毕,文件保存。'; //关闭文件流 filestream.free; filestream := nil; end; end; 写入后的文件为乱码,是什么原因呢? |
|
返回顶楼 | |
发表时间:2010-05-23
java和C++之间的通讯好像还是有点麻烦,C++里面经常用结构,Java里面怎么搞?
|
|
返回顶楼 | |
发表时间:2010-05-24
这也大惊小怪,你们这些人
|
|
返回顶楼 | |
发表时间:2010-09-17
我也不知道这个怎么能上主页的
|
|
返回顶楼 | |
发表时间:2010-10-06
yhailj 写道 在公司没事, 看下 socket api. 做一个小例子看看...
服务器端: 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 文. 没劲... 先启动 服务器端,再启动客户端你是用eclipse调试的吗?或者是其他的? |
|
返回顶楼 | |