Tcp网络程序设计利用(Socket类编写通信程序)
利用TCP协议进行通信的两个应用程序是有主次之分的。分为服务器程序,以及客户机程序 以及程序编写的顺序
端口:端口就好比一个售票大厅,大厅(网线)就只有一个,不同的功能(程序)到达不同的窗口(端口)从而提高程序的效率。网络程序设计中的端口,并非真实的物理存在,而是一个假象的连接装置
计算机中的端口有0~665536个。但注意的是:0-1023之间的端口数用于一些知名的网络服务和应用,用户的普通网络应用程序应该使用1024以上的端口数。
套接字(Socket):提供给程序可以对外进行连接的端口,程序想要连接网络,需要操作端口,ip,网卡驱动,效验连接,数据包等
- 套接字相当于一个门面,它把复杂的需要连接网络的操作连接的操作打包起来,构成一个插座,这个插座就是套接字,用于
- 将应用程序与端口连接起来
客户端套接字:
语法: Socket client = new Socket(“192,168,0,1”,1100);
- 192,168,0,1 服务器的IP地址,可以是字符串也可以是数字IP地址
- 1100: 服务器开启的接口
常用的方法:
- 1.getlnterputStream() 获取套接字输入流,返回lnterputStream对象,服务器返回的数据流
- 2.getOutputStream() 获取套接字输出流,返回OutputStream对象,可以用客户端向服务器发数据
- 3.isConnect() 判断套接字是否连接
- 4.close() 关闭套接字
服务器套接字:
语法: ServerScoker sercer = new ServerSocket(1100)
- 1100:服务器开启的端口
常用的方法:
- 1.accept() 等待客户端连接,返回成功连接的Socket对象,相当于手机处于开机状态
- 2.getlnetAddress() 返回此服务器套接字的本地地址
- 3.isClosed() 查看服务器套接字是否关闭
- 4.close()关闭套接字
TCP程序设计流程
TCP程序设计始终遵从 先搭建服务器,再搭建客户端
- 1.创建服务器套接字–2.创建客户端套接字–3.服务器开启监听(accept())
- 4.处理传输数据(同时) - - 5.启动服务器–6.启动客户端
举例:服务器及客户端收发信息
服务器程序:
import java.io.IOException;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class 服务器 {
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(1100);//创建服务器套接字
System.out.println("服务器启动成功,等待用户接入");
Socket client = server.accept();//等待用户接入
System.out.println("有客户端接入,客户端IP地址:"+client.getInetAddress());
InputStream in = client.getInputStream();
byte[] bt = new byte[1024];
int len = in.read(bt);
String date = new String(bt,0,len);
System.out.println("客户端发出的消息:"+date);
OutputStream out = client.getOutputStream();
String message = "我收到你的消息了,你也好呀";
out.write(message.getBytes());//字符串换成字节数组
client.close();//关闭服务器
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}//创建服务器套接字
}
}
客户端程序:
import java.io.*;
import java.net.Socket;
import java.net.UnknownHostException;
//import org.omg.CORBA_2_3.portable.OutputStream;
public class dome {
public static void main(String[] args) {
try {
Socket client = new Socket("127.0.0.1",1100);//套接字创建
//指定服务器地址127.0.0.1 本地IP地址
System.out.println("连接成功");
OutputStream out = client.getOutputStream();
String message = "服务器你好,我是客户端";
out.write(message.getBytes());//字符串换成字节数组
InputStream in = client.getInputStream();
byte[] bt = new byte[1024];
int len = in.read(bt);
String date = new String(bt,0,len);
System.out.println("服务器发出的消息:"+date);
client.close();//关闭客户端
} catch (UnknownHostException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
结果如下:
服务器端:
服务器启动成功,等待用户接入
有客户端接入,客户端IP地址:/127.0.0.1
客户端发出的消息:服务器你好,我是客户端
客户端:
连接成功
服务器发出的消息:我收到你的消息了,你也好呀