网络编程基础
来源:互联网 发布:长期避孕药 知乎 编辑:程序博客网 时间:2024/06/07 19:27
Socket通信
* 网络编程三要素:
ip:
一个计算的标示(找到这个计算机)
端口:
应用程序都会对应一个端口,用来进行通信,有效端口:0~65535,其中0~1024系统使用或保留端口。
协议:
总共有2种协议(TCP,UDP)
UDP
把数据打成一个数据包 , 不需要建立连接
数据包的大小有限制不能超过64k
因为无连接,所以属于不可靠协议(可能丢失数据)
因为无连接 ,所以效率高
TCP
需要建立连接,形成连接通道
数据可以使用连接通道直接进行传输,无大小限制
因为有链接,所以属于可靠协议
因为有链接,所以效率低
InetAddress类的概述
为了方便我们对IP地址的获取和操作,java提供了一个类InetAddress 供我们使用,此类表示互联网协议 (IP) 地址。
例子:
public class InetAddressTest { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub //通过主机ip获取对象 InetAddress address = InetAddress.getByName("192.168.20.12"); System.out.println(address.getHostAddress()); System.out.println(address.getHostName()); }}
UDP通信步骤:
发送端步骤:
UDP发送数据的步骤: A:创建UDP发送数据端Socket对象 B:创建数据包,并给出数据,把数据打包 C:通过Socket对象发送数据包 D:释放资源
接收端步骤:
UDP协议接收数据步骤: A:创建UDP接收数据端Socket对象 B:创建一个接收数据的数据包 C:接收数据,数据在数据包中 D:解析数据包,并把数据显示在控制台 E:释放资源
简单的聊天室代码实现:
客户端:
public class Client implements Runnable{ DatagramSocket ds; public Client(DatagramSocket ds){ this.ds=ds; } Scanner sc = new Scanner(System.in); String s; @Override public void run() { // TODO Auto-generated method stub while((s=sc.next())!=null){ byte[] buf = s.getBytes(); int length = buf.length; InetAddress address = null; try { address = InetAddress.getByName("192.168.20.12"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } int port = 2333; DatagramPacket dp = new DatagramPacket(buf, length, address, port); try { ds.send(dp); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } ds.close(); }}
服务端:
public class Server implements Runnable{ DatagramSocket ds; public Server(DatagramSocket ds){ this.ds=ds; } @Override public void run() { // TODO Auto-generated method stub while(true){ byte [] buf = new byte [1024]; int length = buf.length; DatagramPacket dp = new DatagramPacket(buf, length); try { ds.receive(dp); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } byte[] data = dp.getData(); int i = data.length; System.out.println(dp.getAddress().getHostAddress()+":"+new String(data, 0, i)); } }}
TCp通信步骤:
发送端:
* TCP协议发送数据步骤: * A:创建TCP协议发送端Socket对象 * 指定服务器IP及端口 * B:获取输出流,并写数据 * C:释放资源
接收端:
* TCP协议接收数据步骤: * A:创建TCP协议接收端Socket对象 * B:监听客户端连接 * C:获取输入流,并读取数据,显示在控制台 * D:释放资源
例子:
客户端:
public class TcpClient { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub Socket sk = new Socket("192.168.20.12", 2345); OutputStream os = sk.getOutputStream(); byte[] buf = "hello".getBytes(); os.write(buf); os.close(); sk.close(); }}
服务端:
public class TcpServer { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub ServerSocket ss = new ServerSocket(2345); Socket sk = ss.accept(); InputStream is = sk.getInputStream(); byte [] buf = new byte [1024]; is.read(buf); System.out.println(new String(buf,0,buf.length)); is.close(); sk.close(); }}
阅读全文
0 0
- 网络编程:网络基础
- 网络编程基础
- 网络编程基础
- c#网络编程基础
- 网络编程基础(1)
- 网络编程基础(2)
- 网络编程基础(3)
- 网络编程知识基础
- VC网络编程基础
- linux网络编程基础
- 网络编程基础篇
- VC网络编程基础
- VC网络编程基础
- VC网络编程基础
- Linux 网络编程基础
- Socket网络编程基础
- socket网络编程基础
- 网络编程基础
- 字符串DP cf803E
- Android手势密码实现方案
- 卷积神经网络CNN理论到实践(3)
- mysql5.7.12 源码安装
- JS阻止事件的传播行为
- 网络编程基础
- java 获取本机的详细信息
- Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)
- 使用XAMPP3.2.2开局域网访问
- 百度上传图片webuploader与photoswipe预览图片
- ng2依赖库平滑升级方案
- java中的异常处理
- 在一个字符串中找到第一个只出现一次的字符
- a元素在IE11与IE11以下浏览器中的不同渲染方式