java的基础网络编程:TCP/UDP
2015-11-23 22:18
691 查看
1.TCP
服务器端:
客户端:
PS:可以在这基础上扩展成基于TCP的聊天小程序。
2.UDP
服务器端:
客户端:
PS:这是基于UDP的聊天程序,以bye来结束链接。
服务器端:
import java.io.*; import java.net.*; import java.util.*; public class TCPServer { public static void main(String args[]) { int count=0; try { ServerSocket server=new ServerSocket(8888); //创建绑定端口8888的服务器套接字 System.out.println("服务器对端口进行监听"); //服务器循环接收客户端的链接请求 boolean flag=true; while(flag) { Socket st=server.accept();//接收客户端请求,返回对应的Socket DataInputStream din=new DataInputStream(st.getInputStream()); //获取当前链接的输入流,并利用处理流进行封装 DataOutputStream dout=new DataOutputStream(st.getOutputStream());//获取当前链接的输出流,并利用处理流进行封装 System.out.println("这是第 "+(++count)+"个客户访问"); System.out.println("客户端IP地址:"+st.getInetAddress()); System.out.println("客户端信息: "+din.readUTF()); //向客户端发送信息 dout.writeUTF("你好!已收到信息"); if(count==2) //设定一个条件,自设! flag=false; //关闭流 din.close(); dout.close(); //关闭套接字 st.close(); } server.close(); } catch(Exception e) { e.printStackTrace(); } } }
客户端:
import java.io.*; import java.net.*; import java.util.*; public class TCPClient { public static void main(String args[]) { try { Socket sc=new Socket("127.0.0.1",8888); //创建链接到服务器端口的套接字 DataInputStream din=new DataInputStream(sc.getInputStream()); //获取当前链接的输入流,并利用处理流进行封装 DataOutputStream dout=new DataOutputStream(sc.getOutputStream());//获取当前链接的输出流,并利用处理流进行封装 //向服务器发送数据 dout.writeUTF("hello server!"); System.out.println(din.readUTF()); //关闭流 din.close(); dout.close(); sc.close(); } catch(Exception e) { e.printStackTrace(); } } }
PS:可以在这基础上扩展成基于TCP的聊天小程序。
2.UDP
服务器端:
import java.io.*; import java.net.*; import java.util.*; public class UDPServer { public static void main(String args[]) throws IOException { DatagramSocket server=new DatagramSocket(8888); //创建udp套接字 boolean flag=true; while(flag) { //接收客户端的信息 byte[] recvbuf=new byte[100]; DatagramPacket recvbag=new DatagramPacket(recvbuf,recvbuf.length); server.receive(recvbag); //接收数据包 String recv=new String(recvbag.getData(),0,recvbag.getLength()); //拆包,得到缓冲区的数据 int port=recvbag.getPort(); InetAddress addr=recvbag.getAddress(); System.out.println(port+": "+recv); if(recv.equals("bye")) flag=false; //向客户端发送信息 byte[] sendbuf=new byte[200]; String sendStr; //键盘输入发送内容 Scanner in=new Scanner(System.in); System.out.println("请输入内容:"); sendStr=in.nextLine(); sendbuf=sendStr.getBytes(); DatagramPacket sendbag=new DatagramPacket(sendbuf,sendbuf.length,addr,port); server.send(sendbag); //发送 } server.close(); } }
客户端:
import java.io.*; import java.net.*; import java.util.*; public class UDPClient { public static void main(String args[]) throws IOException { DatagramSocket client=new DatagramSocket(); //创建udp套接字,客户端不需要绑定端口 boolean flag=true; while(flag) { //向发送服务器内容 byte[] sendbuf=new byte[200]; String sendStr; //键盘输入发送内容 System.out.println("请输入内容:"); Scanner in=new Scanner(System.in); sendStr=in.nextLine(); sendbuf=sendStr.getBytes(); //发送方的端口和IP地址 int port=8888; InetAddress addr= InetAddress.getByName("127.0.0.1"); //创建发送的数据报包 DatagramPacket sendbag=new DatagramPacket(sendbuf,sendbuf.length,addr,port); //发送 client.send(sendbag); if(sendStr.equals("bye")) flag=false; //接收服务器发来的数据 byte[] recvbuf=new byte[100]; DatagramPacket recvbag=new DatagramPacket(recvbuf,recvbuf.length); //创建接收报包 client.receive(recvbag); //接收数据包 String recv=new String(recvbag.getData(),0,recvbag.getLength()); //拆包,得到缓冲区的数据 int srvport=recvbag.getPort(); InetAddress srvaddr=recvbag.getAddress(); System.out.println(srvport+": "+recv); } client.close(); } }
PS:这是基于UDP的聊天程序,以bye来结束链接。
相关文章推荐
- 【LINUX/UNIX网络编程】之简单多线程服务器(多人群聊系统)
- DICOM:DICOM3.0网络通信协议(三)
- 网络基础之网络参考模型 + 网络协议
- HTTP之一:http协议简介(3)
- HTTP之一:http协议简介(2)
- BP神经网络进行网络训练
- 互联网技术发展之路(7)- 网络层技术剖析
- HTTP之一:http协议简介(1)
- Caused by: android.os.NetworkOnMainThreadException错误解决办法(强制主线程做网络请求)
- HttpSession和jsp中session的区别(转)
- Android-GPS,网络定位
- iOS --- AFNetworking3.0网络请求方法封装(自带缓存功能)
- JDK下sun.net.www.protocol.http.HttpURLConnection类-----Http客户端实现类的实现分析
- appStore检查更新的json地址http://itunes.apple.com/lookup?id=%@&country=cn
- HttpServletRequest与HttpServletResponse概要
- [c#][Windows 10 | Windows 10 mobile | Windows Phone] HttpClient 实现form-data POST上传请求
- TCP/IP、Http、Socket的区别
- 认识http协议
- vm的网络设置
- 怎么利用HttpURLConnection向服务器发送键值对