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]读写缓存不能过多,否则将导致发送出去的数据无效。

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

 

你可能感兴趣的:(java,编程,网络,socket,String,dos)