Socket编程
Socket和操作系统有关。使用tcp/ip协议进行编程。UDP协议。TCP为可靠交换协议,UDP为不可靠交换协议,如果有兴趣的同学可以百度一下,这里的重点不是网络。
IP 地址:ipv4 ipv6,ff:ff:ff:ff 202.102.134.68,一个 ip 地址唯一的标识了一个连网终端。
端口:一台主机 host,端口有 65536 个,其中前1024个端口分配给系统使用,比较固定,专用。1024之外的端口可以由应用程序去使用。
一个ip地址加一个端口,就唯一的确定了一个应用通讯终端。
通讯的时候,使用报文进行传输。网络的七层通信模型。协议也是规范,也是标准。
好了,了解了这些网络知识,开始进入正题。
java实现发送端和接收端
接收端
package com.situ.chapter5;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class SocketMain {
public static void main(String[] args) {
System.out.println("等待发送端连接!");
try(ServerSocket ss = new ServerSocket(44444);
Socket socket = ss.accept();
InputStream is = socket.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);) {
//放在try()里面用完自动关闭,jdk1.7以上的版本才支持,消减异常地狱
byte[] b = new byte[4096];//
List<Byte> all = new ArrayList<>();//储存接收到的字节
while(true) {
int len = bis.read(b);
if(len<=0) {
break;
}
for(int i = 0;i<len;i++) {
all.add(b[i]);
}
}
byte[] total = new byte[all.size()];
for(int i = 0;i<all.size();i++) {
total[i]=all.get(i);
}
String str = new String(total,0,all.size(),"utf-8");
System.out.println("接收到的数据:"+str);
} catch (IOException e) {
e.printStackTrace();
}
}
}
发送端
package com.situ.chapter5;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
public class SocketClient {
public static void main(String[] args) {
String host = "192.168.110.127";//接收端ip
OutputStream os =null;
BufferedOutputStream bos =null;
Socket socket = null;
try {
socket = new Socket(host,4444);
os = socket.getOutputStream();
bos = new BufferedOutputStream(os);
String hello ="张三";
bos.write(hello.getBytes("utf-8"));
System.out.println("发送成功!");
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
socket.close();
os.close();
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
这里需要两台电脑的配合,一台执行发送端代码,一台执行接收端代码,这里不便于演示!