学习笔记---网络编程

来源:互联网 发布:淘宝网男装新款 编辑:程序博客网 时间:2024/05/01 14:36

String.getBytes();方法可以转化为一个byte数组。即byte[] =s.getBytes();

网络技术编程

一、客户端编程步骤

1、  建立网络连接。需要制定连接到的服务器的IP地址和端口号。

2、  交换数据。客户端发送一个请求,服务器响应一个请求。

3、  关闭网络。交换完数据之后,关闭网络连接,释放端口号,内存等资源。

二、服务器端网络编程步骤。

1、  监听端口。服务器端属于被动等待连接,不需要发起连接,只需要监听本地计算机的某个端口即可。

2、  获得连接。客户端连接到服务器端时,就可以获得一个连接。这个连接包括客户端IP地址等信息。获得连接时,需要开启专门的线程处理该连接。每个连接都由一个独立的线程实现。

3、  交换数据。

4、  关闭连接。

TCP编程时java.net.Socket代表客户端连接。Java.net.ServerSocket类代表服务器端连接。

         所以创建客户端连接就是创建Socket对象。

         例如:Socket  socket= new Socket(“192.168.1.1”,10000);

         一旦建立连接,我们进行数据传输使用JAVA io流实现。

         OutputStreamos=socket.getOutputStream();获得输出流。

         InputStreamis=socket.getInputStream();  获得输入流。

         先向输出流中写入数据,这些数据会被系统发送出去。然后输入流读取服务器端的反馈信息。

        os.write(data);发送数据。

         Is.read();输出反馈数据.

 

服务器端,ServerSocket  serversocket=newServerSocket(10000);监听,当有客户端连接到达时,需要建立对应的socket对象, Socket  s=serversocket.accept():得连接。

 

UDP编程

首先介绍一个基础的网络类,InetAddress类,该类的功能是代表一个IP地址,并且将IP地址和域名相关的操作方法包含在该类的内部。用getHostName()方法可以获取本地的域名和IP地址。getByName();方法,可以使用域名、IP地址创建对象,getLocalHost()获取本机地址对象,getHostAddress()获取存在inetAddress中的IP地址。

         InetAddressinet=InetAddress.getLocalHost();获得本机地址对象。

  UDP(userDatagram Protocol)用户数据报协议,在JAVA API 中,实现UDP编程的方式,包含客户端编程和服务器网络边恒分别是DatagramSocket和DatagramPacket;

         DatagramSocket类实现网络连接,包括客户端和服务器端网络连接。它实现的就是发送数据时的发射器,以及接受数据时的监听器的角色。

         DatagramPocket实现的对于网络中传输的数据封装。该对象代表网络中交换的数据。在UDP编程中,无法发送的数据还是接受的数据都需要被处理成DatagramPacket对象,其中包含发送到的地址、发送到的端口以及发送的内容。

         在客户端的建立连接不需要指定IP地址和端口号,DatagramSocket ds=new DatagramSocket();当然也可以指定连接使用的端口号。UDP编程中IO技术不是必须的。在发送数据时,需要将发送的数据转换为byte数组,然后将发送的内容,服务器ip和端口号一起构成一个DatagramPacket类型对象,这样数据的准备就完成了。

         DatagramPacket中的getAddress()获得其数据包中的ip地址,getPort()获得端口号,getData()获得数据,getLength获得数据长度。getAddress获得的ip地址需要赋值给InetAddress对象,然后用它的getHostAddress()方法吧ip地址解析出来。

         说明:DatagramPacketdp=new DatagramPacket(data, data.length, addrdss,  serverport);

                 第一个参数是byte数组类型数据,第二参数是长度,第三参数是InetAddress对象获得的ip地址,第四就是端口号;第三参数创建可用ip地址直接创建;

更新于2015-5-13

这段时间用到了UDP编程,也算学习了下UDP编程。我是做的一个测试,一个服务器端在电脑上运行,客户端是一个安卓程序,用来发送消息到服务器端。

代码我就直接贴出。

接收端:

import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.SocketException;/** * @author FZY E-mail:zongyue.feng@foxmail.com * @version 创建时间:2015-5-12 下午5:09:02  * 类说明   UDP实现的客户端,用来接收数据,并显示出来 */public class Client {/** * @param args * @throws IOException */public static void main(String[] args) throws IOException {// TODO Auto-generated method stubMyrunnable myrunnable = new Myrunnable();Thread thread = new Thread(myrunnable);thread.start();}public static class Myrunnable implements Runnable {@SuppressWarnings("resource")@Overridepublic void run() {// TODO Auto-generated method stubtry {DatagramSocket ds = new DatagramSocket();byte[] buf = new byte[1024];DatagramPacket dp = null;ds = new DatagramSocket(6789);dp = new DatagramPacket(buf, 1024);System.out.println("receive data========");while (true) {ds.receive(dp);//接收数据String string = new String(dp.getData(), 0, dp.getLength())+ "from" + dp.getAddress().getHostAddress() + ":"+ dp.getPort();//此处是把接收到的数据转为字符串,并且组合发送过来的地址和端口。System.out.println(string);ds.close();}} catch (SocketException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}};}
Android发送端,界面就一个按钮,每点击就会发送一个Hello world!

package com.example.udpserver;import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.SocketException;import java.net.UnknownHostException;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class UdpserverActivity extends Activity {private Button button;DatagramSocket ds = null;DatagramPacket dp = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.udpserver);button = (Button) this.findViewById(R.id.button);button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubMyRunn myRunn = new MyRunn();new Thread(myRunn).start();}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.udpserver, menu);return true;}public class MyRunn implements Runnable {@Overridepublic void run() {// TODO Auto-generated method stubtry {ds = new DatagramSocket(3000); // 服务器端在3000端口监听String string = "Hello world!!!";dp = new DatagramPacket(string.getBytes(), string.length(),InetAddress.getByName("172.18.144.135"), 6789);// 服务器端向9000端口发送数据System.out.println("发送信息========");ds.send(dp);ds.close();} catch (SocketException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}




0 0
原创粉丝点击