JAVA Socket
Tcp的cs通信
一客户端向服务器发送消息,先启动服务器,后启动客户端,accept会一直等待。
服务器
//服务端 public class TcpServerDemo01 { public static void main(String[] args) { ServerSocket serverSocket=null; Socket socket=null; InputStream is=null; ByteArrayOutputStream baos=null; try { //有一个地址(本地),端口999 serverSocket=new ServerSocket(999); while (true) { //等待客户端连接 socket = serverSocket.accept(); //读取客户端消息 is = socket.getInputStream(); //管道流 baos = new ByteArrayOutputStream(); byte[] buffer=new byte[1024]; int len; while((len=is.read(buffer))!=-1){ baos.write(buffer,0,len); } System.out.println(baos.toString()); for (int i = 0; i < buffer.length; i++) { System.out.println(buffer[i]); }
System.out.println(new String(buffer,0,buffer.length)); } }catch (IOException e) { e.printStackTrace(); } finally { if(baos==null){ try { baos.close(); } catch (IOException e) { e.printStackTrace(); } } if(is==null) { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } if (socket==null) { try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } if(serverSocket==null) { try { serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
客户端
//客户端 public class TcpClientDemo01 { public static void main(String[] args) { try { //要知道服务端的地址和端口号 InetAddress serverIp=InetAddress.getByName("127.0.0.1"); int port =999; //创建一个socket连接 Socket socket=new Socket(serverIp,port); //System.out.println(serverIp.toString()); //发送消息给os OutputStream os =socket.getOutputStream(); os.write("hell 世界".getBytes()); os.close(); socket.close(); } catch (Exception e) { e.printStackTrace(); } } }
这是客户端向服务器发送消息,服务器要有ip和端口号,
二,客户端向服务器发送图片文件
服务器
package Internet.lesson2; import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.nio.charset.StandardCharsets; public class TcpServerdemo02 { public static void main(String[] args) throws Exception { //创建服务 ServerSocket serverSocket=new ServerSocket(9000); //监听客户端连接 Socket socket = serverSocket.accept();//会一直等待 System.out.println("连接成功"); //获取输入流 InputStream is = socket.getInputStream(); //文件输出 FileOutputStream fos = new FileOutputStream(new File("src/receives.jpg")); byte[] buffer = new byte[1024]; int len; while ((len=is.read(buffer))!=-1) { fos.write(buffer,0,len); } //通知客户端接收完毕 OutputStream os=socket.getOutputStream(); os.write("我接受完毕了".getBytes(StandardCharsets.UTF_8)); fos.close(); is.close(); socket.close(); } }
客户端
public class TcpClientDemo02 {
public static void main(String[] args) throws Exception {
//创建一个socekt连接
Socket socket=new Socket(InetAddress.getByName("127.0.0.1"),9000);
//创建一个输出流
OutputStream os=socket.getOutputStream();
//读取文件
FileInputStream fis=new FileInputStream(new File("imgTcp02.jpg"));//imgTcp02为下载好的图片
//写出文件
byte[] buffer=new byte[1024];
int len;
while ((len=fis.read(buffer))!=-1)
{
os.write(buffer,0,len);
}
fis.close();
os.close();
socket.close();
}
}
三,Udp的通信
客户端,udp没有服务器。
package Internet.lesson2.lesson3; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.nio.charset.StandardCharsets; public class UdpClient01 { public static void main(String[] args) throws Exception { //建立一个socket DatagramSocket socket=new DatagramSocket(); //建个包 String msg="你好,服务器"; //发送给谁 InetAddress localhosts = InetAddress.getByName("localhost"); int port =9090; DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, localhosts, port); //发送包 socket.send(packet); socket.close(); } }
服务器
public class UdpServer02 { public static void main(String[] args) throws Exception { //开放端口 DatagramSocket socket = new DatagramSocket(9090); //接受数据 byte[] buffer = new byte[1024]; DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length); socket.receive(packet); System.out.println(packet.getAddress());//地址127.。。。 System.out.println(new String(packet.getData()));//数据 System.out.println(packet.toString());//java.net.DatagramPacket@66a29884 //关闭连接 socket.close(); } }
四,双向通信,
新建一个Talksender继承Runnable接口
public class Talksender implements Runnable{ DatagramSocket socket=null; BufferedReader reader =null; private int myport; private String toIp; private int toPort; public Talksender( int myport, String toIp, int toPort) { this.myport = myport; this.toIp = toIp; this.toPort = toPort; try { socket = new DatagramSocket(myport); reader = new BufferedReader(new InputStreamReader(System.in)); } catch (SocketException e) { e.printStackTrace(); } } @Override public void run() { //准备数据 while (true){ String data= null; try { //System.out.print("我说"); data = reader.readLine(); byte[] datas=data.getBytes(StandardCharsets.UTF_8); DatagramPacket packet = new DatagramPacket(datas,0,datas.length,new InetSocketAddress(this.toIp,this.toPort)); //发送 socket.send(packet); if (data.equals("bye")){ break; } } catch (IOException e) { e.printStackTrace(); } } socket.close(); } }
新建一个TalkReceive,继承Runnable接口
public class Talkreceive implements Runnable{ String fromName; DatagramSocket socket=null; private int port; public Talkreceive(String fromName, int port) { this.fromName = fromName; this.port = port; try { socket = new DatagramSocket(port); } catch (SocketException e) { e.printStackTrace(); } } @Override public void run() { while (true){ try { byte[] bytes = new byte[1024]; DatagramPacket packet = new DatagramPacket(bytes,0,bytes.length); socket.receive(packet);//接受消息 byte[] data = packet.getData(); String s = new String(data,0,data.length); System.out.println(fromName+":"+s);//输出来者消息 if (s.equals("bye")){ break; } } catch (IOException e) { e.printStackTrace(); } } socket.close(); } }
新建学生类
package Internet.lesson2.lesson3.chat; public class TalkStudent { public static void main(String[] args) { new Thread(new Talksender(7777,"localhost",9999)).start();//发送到9999窗口 new Thread(new Talkreceive("老师",8888)).start();//从8888窗口接受 } }
新建老师类
package Internet.lesson2.lesson3.chat;
public class TalkTeacher {
public static void main(String[] args) {
new Thread(new Talksender(5555,"localhost",8888)).start();
new Thread(new Talkreceive("学生",9999)).start();
}
}
运行老师类和学生类,发送时没有发送名字,接受时才知道来着名字。
五,udp发送控制台输入消息
服务端
package Internet.lesson2.lesson3.chat;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class Udpreceive {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket(6666);
while (true){
byte[] bytes = new byte[1024];
DatagramPacket packet = new DatagramPacket(bytes,0,bytes.length);
socket.receive(packet);//接受消息
byte[] data = packet.getData();
String s = new String(data,0,data.length);
System.out.println(s);
if (s.equals("bye")){
break;
}
}
socket.close();
}
}
客户端
package Internet.lesson2.lesson3.chat;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.*;
import java.nio.charset.StandardCharsets;
public class Udpsender {
public static void main(String[] args) throws Exception {
DatagramSocket socket = new DatagramSocket(8888);
//准备数据
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
while (true){
String data=reader.readLine();
byte[] datas=data.getBytes(StandardCharsets.UTF_8);
DatagramPacket packet = new DatagramPacket(datas,0,datas.length,new InetSocketAddress("localhost",6666));
//发送
socket.send(packet);
if (data.equals("bye")){
break;
}
}
socket.close();
}
}
本人学生,技术不行,跟着网上的课程敲得,如果有差错,请指正,万分感谢。网课为狂神study。。

浙公网安备 33010602011771号