网络通信TCP/UDP

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/myloveprogrmming/article/details/83662406


 * Socket通信:套接字通信---认为TCP/UDP是属于它下面的
 * 
 * 比较TCP/UDP?
 * TCP与UDP的区别:
 * TCP:流                      UDP:包
 * 1建立在连接的基础上                  建立在非连接的基础上
 * 2安全性更高                    安全性低
 * 3传输速度低                    速度高
 * 4适合传输数据量大的数据        数据量小的数据
 * 
 * 客户端:(app/浏览器)
 * 服务器端!=主机 [注:服务器只是主机上的一个应用,至于为什么有时候大家会说
 * 这是一台服务器?因为那台主机上只有一个应用,是该应用专属的电脑]
 * 端口号:同一台主机上每一个服务器拥有自己的端口号,取值范围[0,65535],
 * 常用的端口:80,8080。
 * 注意点:
 * 1【要保证客户端和服务器端的端口号一致】
 * 2要保证同一台主机上的不同服务器端口号不同
 * 
 * UDP:
 * 【注意点:在工作的时候,应该先将服务器端运行起来,处于一个监听状态,再运行客户端】
 * 客户端:
 * 1创建UDP通信的对象-socket对象:对应的类是DatagramSocket
 * (用于UDP数据的发送与接收)
 * 2数据的准备-封装包:DatagramPacket(数据包,包括相关的属性,数据)
 * 3发送数据:通过send方法

//服务器端:接收数据
//1创建Socket对象,并绑定端口号
//2创建包对象,创建空数组,准备接收传来的数据
//3接收数据
//4关闭相关的对象

//接收数据,当程序运行起来的时候,它会一直运行,让程序处于监听状态
ds.receive(dp);
//将数据从包中取出
byte[] arr=dp.getData();

UDP不断发不断收---客户端 

public class UDPClient1 {

	public static void main(String[] args) throws IOException {
		DatagramSocket ds=new DatagramSocket();
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		String data;
		while((data=br.readLine())!=null)
		{
			byte[] b=data.getBytes();
			DatagramPacket dp=new DatagramPacket(b,b.length,InetAddress.getLocalHost(),50001);
			ds.send(dp);
			if(data.trim().equals("over"))
				break;
		}
		ds.close();
	}

}

 UDP不断发不断收---服务器端

package socket;

import java.io.IOException;
import java.net.*;

public class UDPServer1 {

	public static void main(String[] args) throws IOException {
		DatagramSocket ds=new DatagramSocket(50001);
		while(true) {
			byte[] b=new byte[1024];
			DatagramPacket dp=new DatagramPacket(b,b.length);
			ds.receive(dp);
			byte[] arr=dp.getData();
			String s=new String(arr).trim();
			System.out.println(s);
			if(s.equals("over"))
				break;
		}
		ds.close();
	}

}
package socket;
//用CTP实现客户端与服务器端之间的连续通信
import java.io.*;
import java.net.*;


public class TCPClient1 {

	public static void main(String[] args) throws UnknownHostException, IOException {
		InetAddress ina=InetAddress.getByName("10.0.154.144");
		Socket socket=new Socket(ina,4212);
		OutputStream os=socket.getOutputStream();
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		InputStream is=socket.getInputStream();
		while(true) {
			String data=br.readLine();
			byte[] b=data.getBytes();
			os.write(b);
			if(data.equals("over"))
				break;
			byte[] arr=new byte[1024];
			int len=is.read(arr);
			String data2=new String(arr,0,len);
			System.out.println(data2);
			if(data2.equals("over"))
				break;
		}
		socket.close();
	}

}
package socket;
//用CTP实现客户端与服务器端之间的连续通信
import java.io.*;
import java.net.*;

public class TCPServer1 {

	public static void main(String[] args) throws IOException {
		ServerSocket ss=new ServerSocket(4212);
			Socket socket=ss.accept();
			InputStream input=socket.getInputStream();
			OutputStream os=socket.getOutputStream();
			BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		while(true) {
			byte[] b=new byte[1024];
			int len=input.read(b);
			String str=new String(b,0,len);
			System.out.println(str);
			if(str.equals("over"))
				break;
			String data=br.readLine();
			os.write(data.getBytes());
			if(data.equals("over"))
				break;
		}
		ss.close();
	}

}
package socket;

import java.io.*;
import java.net.*;

/*
 * 练习一:
 * 实例:实现大小写转换的服务器
 * 要求:实现不断发不断收
 * ---客户端
 */
public class CaseClient {

	public static void main(String[] args) throws UnknownHostException, IOException {
		Socket s=new Socket(InetAddress.getLocalHost(),6666);
		OutputStream os=s.getOutputStream();
		BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
		while(true)
		{
			char c=(char)bf.read();
			os.write(c);
			if(c=='1')
				break;
		}
		s.close();

	}

}
package socket;

import java.io.*;
import java.net.*;

/*
 * 练习一:
 * 实例:实现大小写转换的服务器
 * 要求:实现不断发不断收
 * ---服务器端
 */
public class CaseServer {

	public static void main(String[] args) throws IOException {
		ServerSocket ss=new ServerSocket(6666);
		Socket s=ss.accept();
		InputStream is=s.getInputStream();
		while(true)
		{
			Character c=(char)is.read();
			if(c.isUpperCase(c))
				System.out.println(c.toLowerCase(c));
			if(c.isLowerCase(c))
				System.out.println(c.toUpperCase(c));
			if(c.equals('1'))
				break;
		}
		s.close();
		ss.close();
	}

}

猜你喜欢

转载自blog.csdn.net/myloveprogrmming/article/details/83662406