Java网络编程初步

 

Java网络编程初步

Kagula

2009-11-23

关键词

Java  Socket  DataInputStream   DataOutputStream

概要

    使用Java同步IO应用程序库,实现CS结构网络编程。

正文

使用Socket来建立网络连接,使用DataInputStreamDataOutputStream来存取网络流。

 

客户端部份

第一步:建立网络连接对象,和网络流输入输出对象

Socket c = new Socket(InetAddress.getByName("192.168.0.144"),6009);

dis      = new DataInputStream(c.getInputStream());

dos      = new DataOutputStream(c.getOutputStream());

第二步:读写网络流

写字符串用下面的代码

dos.writeUTF(list.get(i).toString());

dos.flush();

写二进制数据采用下面的代码

//byte[] b = new byte[nnL];

dos.write(b,0,nnL);

dos.flush();

这里要注意的是write函数的第二个参数,指的是缓存区起始位置,nnL指的是缓存区中数据的长度。b缓存的大小建议为1KB,过大会导致部份数据发送出去了,但是接收到没有收到有效的数据。

读字符串用下面的代码

String sR = dis.readUTF();

读二进制数据用下面的代码

 

Dis.read(b,0,nnL);

这里需要注意,发送端同接收端之间,网络流存取函数要匹配,数据长度也要匹配,否则会阻塞。

第三步:关闭连接。代码如下

Dis.close();

Dos.close();

C.close();

服务端部份

     第一步:建立ServerSocket对象,得到客户端的连接请求,代码如下:

ServerSocket server = new ServerSocket(listenPort);

Socket incomingConnection = null;

while(true) {

   incomingConnection = server.accept();

   incomingConnection.setSoTimeout(9*60*1000);

   handleConnection(incomingConnection);

}

其中,listenPort是侦听端口为整型。客户同发送请求后,服务端和客户端建立连接,server.accept返回socket

利用socket,得到读写网络流数据的对象,其它同客户端的编程方式。在完成读写后你也需要调用socket实例的close函数,断开同客户端的连接。Socket实例的setSoTimeout设置,保证在九秒后自动关闭同客户端的连接。

 

 

总结:

相比C++Java提供的API非常容易使用。但是也要注意几个问题。[1]服务端和客户端的读写函数必须要匹配。[2]服务端同客户端之间读写的数据长度要一致。[3]读写缓存不能过多,否则将导致发送出去的数据无效。

在第三个问题上,可是费了一个工作日才找到原因。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kagula086

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值