其实写这篇文章还是源于和师兄一起做一个用Java语言与网关链接从而间接控制路灯亮度的一个项目,其实网上有很多的socket编程的教程,我只针对连续发送数据这点写一点简单的代码希望能对大家有所帮助!
第一步:
封装一个socket编程的类名字叫SocUtil,其中有两个方法,一个是start方法(此方法是开启socket服务端并进行监听),另外一个是input方法(此方法是向输出流中输入整形数组的数据)简单代码如下:
public class SocUtil {
static ServerSocket serverSocket;
static Socket socket;
//下面的是创建链接,并进行监听
public static void start(){
try {
serverSocket = new ServerSocket(50000);//指定端口号
socket = serverSocket.accept();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//下面的是向输出流中输入信息
public static void input(int information[]){//服务器向客户端发送数据
try {
OutputStream outputStream=socket.getOutputStream();
//得到向客户端的输出流
for(int i=0;i<information.length;i++){
outputStream.write(information[i]);
}
} catch (IOException e) {
e.printStackTrace();
}
}}
第二步:
配置servlet,在dopost方法中进行数据的处理,代码如下:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String inform=request.getParameter("controlamp");
String suminform="";
suminform+=inform;
String str[]=suminform.split(" ");
int arr[]=new int[str.length];
for(int i=0;i<str.length;i++){
BigInteger fordate=new BigInteger(str[i], 16);
arr[i]=fordate.intValue();
}
SocUtil.input(arr);
}
}
在上面的编程中第二步实现的功能是从页面中将16进制类型的字符串转化为整形数组,从而实现连续发送整形数组的功能,这样编程的好处是socket编程不会链接中断,以往的socket编程都是用while循环,但这种类型的编程搬到页面上就会遇到很多困难,希望我的编程方式能给那些用网页进行socket编程的朋友带去一些帮助,也希望大家提出意见,谢谢!