如何实现socket网络编程的多线程
本文主要介绍了如何实现socket网络编程的多线程,分享给大家
TCP、UDP、IP地址的基本介绍:
- TCP
- UDP:
- IP地址:
下面的例子是基于TCP协议进行的。
publicclassClient{
publicstaticvoidmain(String[]args)throwsException{
//打开一个套接字,准备发送请求
Socketsocket=newSocket("localhost",9996);//得先建立连接,就是所谓的TCP是建立可靠的连接
System.out.println("尊敬的VIP客户,请求数据小分队已准备好,请输入您的请求:");
//向服务端发送带着客户端请求的数据,这个请求数据是从键盘读入的,发送给服务端是以PrintWriter的形式包装
PrintWriterout=newPrintWriter(socket.getOutputStream(),true);
//输入流getInputStream(),单独开一个线程在Receive类中完成接收服务器发来的数据
Threadt=newThread(newReceive(socket));
t.start();
Scannerscanner=newScanner(System.in);//键盘输入
while(scanner.hasNextLine()){
out.println(scanner.nextLine());//将从键盘输入的数据发送出去
}
}
}
publicclassReceiveimplementsRunnable{
privateSocketsocket;
publicReceive(Socketsocket){
this.socket=socket;
}
@Override
publicvoidrun(){
try{
Scannerscanner=newScanner(socket.getInputStream());//接收数据
Stringstr=null;
while(true){
str=scanner.nextLine();
System.out.println("服务器说:"+str);//打印接收的数据
}
}catch(IOExceptione){
e.printStackTrace();
}
}
}
publicclassServer{
publicstaticvoidmain(String[]args)throwsException{
ServerSocketserver=newServerSocket(9996);//在端口9996开一个服务,监听客户端发来的请求,准备接收客户端发来的请求数据
System.out.println("服务端准备完毕,随时待命接收请求!");
Socketsocket=server.accept();//只有当有客户端请求并连接时,才回返回一个Socket对象,这个对象就是带着客户端请求的那个Socket对象
//创建一个PrintWriter的实例对象out来完成服务端向客户端的输出数据的任务,
PrintWriterout=newPrintWriter(socket.getOutputStream(),true);
//单独开一个线程接收从客户端过来的请求,在Receive1类中完成数据的接收
Threadt=newThread(newReceive1(socket));
t.start();
/*一定要理解Socket是一个用于机器之间通信的类*/
//发送数据给客户端
Scannerscanner=newScanner(System.in);//键盘输入服务端要发给客户端的数据
while(scanner.hasNextLine()){
out.println(scanner.nextLine());//将键盘输入的服务端要发给客户端的数据封装在PrintWriter类的对象中
}
}
}
publicclassReceive1implementsRunnable{
privateSocketsocket;
publicReceive1(Socketsocket){
this.socket=socket;//在服务端接收客户端发来的数据需要调用Receive1()这个方法,就会得到一个Socket对象,这个对象就是携带着客户端请求的socket
}
@Override
publicvoidrun(){
try{
Scannerscanner=newScanner(socket.getInputStream());//获得客户端从键盘接收的输入流
Stringstr=null;
while(true){
str=scanner.nextLine();
System.out.println("客户端发来的数据:"+str);
}
}catch(IOExceptione){
e.printStackTrace();
}//接收数据
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票