网络接口的实现

Java网络编程接口:

Java的网络通信有有两种的实现的方式,一种是基于套接字的方式,另外一种是基于HTTP的方式

基于套接字的方式:

tcp方式:客户端发起通信之前,必须知道服务器的IP地址或者域名。
服务器端:服务器的套接字通过ServerSocket实现,通过ServerSocket可以直接绑定端口,监听该端口传来的消息。通过ServerSocket的accept()方法可以传入该链接请求创建Socket实例,并将已经成功连接的Socket实例返回给服务器套接字,如果没有连接请求,accept() 方法将阻塞等待。通过Socket的getInputStreame()方法可以获得输入流,查看传入的消息;通过Socket的getOutputStreame()方法可以响应客户端。

public class MainActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  ServerSocket seversocket=null;
  try {
   seversocket=new ServerSocket(1234);
   Socket socket=seversocket.accept();
   InputStream inputStream=socket.getInputStream();

OutputStream outputStream=socket.getOutputStream();

 outputStream.write("ok".getBytes());//返回OK
   byte buffer[]=new byte[1024*4];
   int temp=0;
   while ((temp=inputStream.read(buffer))!=-1) {
    System.out.println(new String(buffer,0,temp));
   }
  } catch (Exception e) {
   // TODO: handle exception
  }
  try {
   seversocket.close();

inputStreame.close();

outputStreame.close();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

}

客户端:可以设置代理,服务器域名,服务器IP地址,端口等信息

public class MainActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  try {
   Socket socket=new Socket("192.168.159.1",1234);
//   InputStream inputStream=new FileInputStream("C://Users/zuozhiyu/Desktop/jianli.txt");
   OutputStream outputStream=socket.getOutputStream();
   InputStream inputStream=socket.getInputStream();
   String string="abcd";
   byte buffer[]=new byte[4*1024];
   buffer=string.getBytes();
   int temp=0;
//   while ((temp=inputStream.read(buffer))!=-1) {
//    outputStream.write(buffer, 0, temp);
//   }
//   outputStream.flush();
   outputStream.write(buffer, 0, temp);
   String s=inputStream.readUTF();//读取响应的消息
  } catch (UnknownHostException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  inputStream.close();
  outputStream.close;
  socket.close();
  
 }

}

基于UDP协议的套接字

基于UDP的套接字主要是通过DatagramSocket进行的,DatagramSocket在通信两端均适用,通过DatagramSocket可以绑定IP地址和端口等

DatagramSocket对象通过send()方法发送消息,通过Receive()方法接收消息,通过connect()方法建立和服务器的连接。

服务器端:主要用来接收数据

   try {
   DatagramSocket ds1=new DatagramSocket(8000);
   byte [] buffer=new byte[1024];
   DatagramPacket dp=new DatagramPacket(buffer, 1024);
   ds1.receive(dp);
   ds1.close();
   
  } catch (Exception e) {
   // TODO: handle exception
  }

客户端:主要用来发送数据

try {
   DatagramSocket ds2=new DatagramSocket();
   String str="this is datagramSocket";
   DatagramPacket dp2=new DatagramPacket(str.getBytes(), str.length(),InetAddress.getByName("localhost"),8000);
   ds2.send(dp2);
   ds2.close();
   
  } catch (Exception e) {
   // TODO: handle exception
  }


Apache网络编程接口:

在Apache中,主要通过HttpClient执行HTTP通信。通过HttpResponse获取服务器响应

执行get请求

 public  class getThread extends Thread {
  
  @Override
  public void run() {
   
    HttpClient httpClient=new DefaultHttpClient();
    HttpGet httpGet=new HttpGet("http://www.baidu.com/");
    
    HttpResponse httpResponse;
    try {
     httpResponse = httpClient.execute(httpGet);
     int statusCode=httpResponse.getStatusLine().getStatusCode();
     if (statusCode>=200&&statusCode<400) {
      StringBuilder stringBuilder=new StringBuilder();
      BufferedReader reader=new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent(),HTTP.UTF_8));
      for (String s=reader.readLine();s!=null;s=reader.readLine()) {
       stringBuilder.append(s);
      }
      reader.close();
      getString=stringBuilder.toString();
      handler.sendMessage(handler.obtainMessage(1));
     }
    } catch (ClientProtocolException e) {
    
     e.printStackTrace();
    } catch (IOException e) {
     
     e.printStackTrace();
    }
  } 
 }

执行post请求:

public  class PostThread extends Thread {
  
  @Override
  public void run() {
   
      List<NameValuePair> formparams  =new ArrayList<NameValuePair>();  //使用NameValuePair来保存要传递的Post参数
      formparams.add(new BasicNameValuePair("username", "hello"));  //添加要传递的参数
//      formparams.add(new BasicNameValuePair("password", "eoe"));
    HttpClient httpClient=new DefaultHttpClient();
    
   
    
    
    HttpResponse httpResponse;
    try {
     UrlEncodedFormEntity entity=new UrlEncodedFormEntity(formparams, HTTP.UTF_8);
     HttpPost httpPost=new HttpPost("http://www.baidu.com/");
     httpPost.setEntity(entity);
     httpResponse = httpClient.execute(httpPost);
     int statusCode=httpResponse.getStatusLine().getStatusCode();
     if (statusCode>=200&&statusCode<400) {
      StringBuilder stringBuilder=new StringBuilder();
      BufferedReader reader=new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent(),HTTP.UTF_8));
      for (String s=reader.readLine();s!=null;s=reader.readLine()) {
       stringBuilder.append(s);
      }
      reader.close();
      getString=stringBuilder.toString();
      handler.sendMessage(handler.obtainMessage(2));
     }
    } catch (ClientProtocolException e) {
    
     e.printStackTrace();
    } catch (IOException e) {
     
     e.printStackTrace();
    }
  } 
 }

Android网络编程接口:

Android的网络接口是针对Apache的在封装和简化,目前Android支持RTP、SIP、HTTP、WIFI、SSL、代理等网络协议。

Android的HTTP通信和Apache的不同点主要体现在HttpClient的实现上,Android的HTTP通信主要是通过AndroidHttpClient而非DefaultHttpClient和Apache的HttpGet、HttpPost、HttpResponse等来实现的,通过AndroidHttpClient可以创建一个HttpClient。通过HttpGet可以获取URI的信息,自动处理服务器的重定向;通过HttpResponse可以处理服务器的响应。

  try {
   AndroidHttpClient client=AndroidHttpClient.newInstance(userAgent);
   HttpGet httpGet=new HttpGet("www.baidu.com");
   HttpResponse response=client.execute(httpGet);
   if (response.getStatusLine().getStatusCode()==HttpStatus.SC_OK) {//200
    //响应
    
   }
   client.close();
  } catch (Exception e) {
   // TODO: handle exception
  }

RTP协议:实时传输协议(Real-time Transport Protocol)




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: DNSC(Domain Name System Controller)是一种用于控制和管理域名系统(DNS)的编程语言。在网络编程中,通过实现DNSC语言,可以实现DNS服务器的自定义配置及管理。 首先,DNSC语言需要支持基本的DNS解析功能。通过编程实现DNSC语言,可以对域名进行解析,将域名转换为相应的IP地址,从而使得网页或者其他网络资源能够在浏览器中正确打开。 其次,DNSC语言还应该支持DNS记录的管理功能。通过编程实现DNSC语言,可以添加、删除、修改DNS记录,包括A记录、CNAME记录、MX记录等。这样,用户可以根据自身需求,动态地管理和控制自己的DNS配置。 此外,DNSC语言还应该支持负载均衡和故障转移功能。通过编程实现DNSC语言,可以根据服务器的负载情况动态分配请求,从而实现负载均衡。当某个服务器出现故障时,DNSC语言可以自动将请求转发到备用服务器,实现故障转移,确保网络的稳定性和可靠性。 最后,DNSC语言还应该支持安全性控制。通过编程实现DNSC语言,可以实现用户名和密码的认证功能,限制非授权用户的访问。同时,还可以实现IP地址过滤功能,限制特定IP地址的访问,提高网络的安全性。 总之,通过网络编程实现DNSC语言,可以实现自定义的DNS控制和管理功能,提升网络资源的访问效率和安全性。 ### 回答2: DNS是域名系统(Domain Name System)的缩写,是一种将域名解析为IP地址的系统。网络编程可以实现DNSC语言(Domain Name System Compiler),这是一种编程语言,可以处理和操作DNS解析的过程。 网络编程可以通过使用Socket编程,实现DNSC语言的功能。Socket是网络编程的基础,它提供了一种通信机制,可以在网络中的不同主机之间实现数据的传输和接收。 首先,需要编写一个DNSC语言解析模块,用来解析输入的域名。这个模块可以使用Socket来与DNS服务器通信,发送和接收DNS查询请求和响应。通过使用Socket编程,可以建立一个与DNS服务器的连接,并发送查询请求,然后解析和获取返回的信息。 其次,需要编写一个DNSC语言生成模块,用来生成DNS查询请求。这个模块可以接收用户输入的域名,然后将其封装成DNS查询请求,使用Socket发送给DNS服务器。 最后,还需要编写一个DNSC语言处理模块,用来处理DNS查询的结果。当接收到DNS服务器返回的响应时,这个模块可以解析和处理返回的信息,将域名解析为对应的IP地址,并将解析结果返回给用户。 总之,通过网络编程,可以实现DNSC语言,实现域名解析的功能。这样,用户可以通过DNSC语言,将域名解析为对应的IP地址,实现网络连接和通信。 ### 回答3: 实现DNSC(Domain Name System Compiler)语言的网络编程可以通过以下步骤完成: 1. 网络连接:首先,需要建立一个与DNS服务器的网络连接。可以使用TCP或UDP协议进行连接,一般情况下,DNS服务器使用默认端口53。 2. 发送请求:使用网络连接发送DNS请求消息。DNSC语言中的命令可以包括查询指定域名的IP地址、查询域名的权威服务器等。将这些命令转换成DNS请求消息,并通过网络连接发送到DNS服务器。 3. 接收响应:等待DNS服务器的响应消息,并使用网络连接接收响应。响应消息包含DNS服务器返回的查询结果,可以是IP地址、权威服务器信息等。 4. 解析响应:对接收到的响应消息进行解析,以获取所需的信息。根据DNSC语言中的命令类型,可以解析出IP地址或权威服务器地址等信息。 5. 反馈结果:将获取到的结果反馈给用户,可以通过控制台输出、界面展示等方式呈现。 在实现DNSC语言的网络编程过程中,需要熟悉DNS协议,并理解DNSC语言的命令和语法规则。同时,还需要使用相应的网络编程库或框架,如Python的socket库、Java的Socket类等,来实现与DNS服务器的网络连接和消息传输。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值