博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java nineteen 网络程序设计 TCP通信
阅读量:6163 次
发布时间:2019-06-21

本文共 4353 字,大约阅读时间需要 14 分钟。

hot3.png

1、TCP(Transmission Control Protocol传输控制协议),是一种面向连接的、可靠的、基于字节流的传输层通信协议,提供两台计算机之间可靠的数据传送,保证数据从一端送至连接的另一端的排列顺序和送出时的顺序相同,可靠性高。

2、端口(port)和套接字(Socket)

网络设计中的端口并非真实的物理存在,只是一个假想的连接装置,规定为0~65535之间的整数。0~1023用于一些知名的网络服务和应用,用户的普通网络应用程序应该使用1024以上的port。

Socket套接字用于将应用程序与端口连接起来。它也是一个假想的连接装置。

3、TCP通信

TCP网络程序设计是指利用Socket类编写通信程序。利用TCP通信的两个应用程序有主次之分,一个称为服务器程序,一个称为客户端程序。

3.1 InetAddress类

 

方法 返回值 功能
getByName(String host) InetAddress Returns:an IP address for the given host name
getHostAddress() String Returns:the raw IP address in a string format.
getHostName() String Returns:the host name for this IP address
get(int index) Object ~~
getLocalHost() InetAddress Returns the address of the local host.
toString() String

Returns:a string representation of this IP address.

 

package Nineteen;import java.net.InetAddress;import java.net.UnknownHostException;public class InetAddressgetByName { @SuppressWarnings("null") public static void main(String[] args){  try{   /*Returns:    an IP address for the given host name.*/   InetAddress inetAddress1 = InetAddress.getByName("www.baidu.com");//www.baidu.com/180.97.33.107   /*Returns:     the raw IP address in a string format.*/   String str = inetAddress1 .getHostAddress();//180.97.33.107   /*Returns:the host name for this IP address, or if the operation is not allowed by the security check, the textual representation of the IP address.*/   String str1 = inetAddress1.getHostName();//www.baidu.com   InetAddress inetAddress2 = InetAddress.getLocalHost();//zhic-PC/169.254.25.6      System.out.println(str);   System.out.println(str1);   System.out.println(inetAddress1.toString());   System.out.println(inetAddress2.toString());  }catch(UnknownHostException e){   e.printStackTrace();  } }}

 

3、2  ServerSocket

用来表示服务器套接字。一般用于设置端口号和监听,accept()之后,其任务就完成了,剩下的是服务器与客户端通过Socket进行通信。

重要的两个方法:

//构造方法 new ServerSocket(int port);//创建绑定特定端口的服务器套接字//如果多台客户机同时提出连接请求,服务器套接字会将请求连接的客户机存入队列中,队列默认大小50。serverSocket.accept(); //等待客户机连接,连接成功,返回一个服务器创建的新的套接字

3.2  Socket类

客户机创建了Socket对象后,会向指定的IP地址和端口号进行连接。服务器套接字accept()后创建新的套接字与客户端建立连接,成功连接后,可以利用Socket对象的getInputStream()获取套接字的输入流读取(readUTF)接收的消息,getOutputStream()获取套接字的输出流发送消息(writeUTF)。

//Server package Nineteen;import java.net.ServerSocket;import java.net.Socket;import java.io.DataOutputStream;import java.io.DataInputStream;public class Server { public static void main(String[] args){ ServerSocket serverSocket = null; Socket clientSocket = null; String str = null; DataOutputStream out = null; DataInputStream in = null;  try{  //java.net.ServerSocket.ServerSocket(int port) throws IOException  //Creates a server socket, bound to the specified port    serverSocket = new ServerSocket(4331);//创建一个绑定4331端口的服务器套接字   clientSocket = serverSocket.accept();//返回一个服务器创建的新Socket对象,该对象绑定了客户端程序的端口号   in = new DataInputStream(clientSocket.getInputStream());//调用Socket的getInputStream()获得输入流   out = new DataOutputStream(clientSocket.getOutputStream());//获得输出流来发送消息    while(true){    str = in.readUTF();//读传送来的消息    out.writeUTF("Hello. I am Server");//发送消息     out.writeUTF(str);//发送从客户端读进的消息     System.out.println("Server received: "+str);     Thread.sleep(1000);     } }catch(Exception e){  e.printStackTrace(); }}}
//clientpackage Nineteen;import java.net.Socket;import java.io.DataInputStream;import java.io.DataOutputStream;public class Client { public static void main(String[] args){  String str = null;  Socket clientSocket;  DataInputStream in = null;  DataOutputStream out = null;    try{   /*java.net.Socket.Socket(String host, int port) throws UnknownHostException, IOException   Creates a stream socket and connects it to the specified port number     on the named host.创建一个套接字与127.0.0.1的4331端口连接 */     clientSocket = new Socket("127.0.0.1",4331);     in = new DataInputStream(clientSocket.getInputStream());//读消息     out = new DataOutputStream(clientSocket.getOutputStream());//发送消息     //void java.io.DataOutputStream.writeUTF(String str) throws IOException     out.writeUTF("Hi");//向发送流中写消息     while(true){   //Open Declaration String java.io.DataInputStream.readUTF() throws IOException       str = in.readUTF();//读服务器发送的消息     out.writeUTF(((int)(Math.random()*10)+1)+"");//向发送流中写消息      System.out.println("Client received: "+str);       Thread.sleep(1000);       }  }catch(Exception e){   e.printStackTrace();  } }}

 

 

转载于:https://my.oschina.net/doudoulee/blog/645382

你可能感兴趣的文章
我的友情链接
查看>>
Oracle数据库对象 序列
查看>>
桌面虚拟化之用户体验篇
查看>>
Nginx如何配置静态文件过期时间
查看>>
【Linux学习记录】Linux文件属性权限、目录管理
查看>>
6.4-全栈Java笔记:异常处理办法(下)
查看>>
Ceilometer的知识总结
查看>>
jQuery最佳实践
查看>>
python核心编程-第六章-个人笔记(二)
查看>>
RHCE系列之权限管理----ACL(访问控制列表)
查看>>
MooseFS灾备演练实录
查看>>
在OL6.5_64上安装Oracle11gR2_64
查看>>
Oracle 冷备份详解【实战案例】
查看>>
MongoDB 聚合管道(Aggregation Pipeline)
查看>>
我的友情链接
查看>>
Linux I2C设备驱动编写(二)
查看>>
nginx+tomcat+msm实现seesion共享
查看>>
PS替换图片图标操作
查看>>
join(long)与sleep(long)的区别
查看>>
python3.x的改进
查看>>