Java套接字的范例帮助理解
第一个javaDemo
服务端套接字代码:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package webservicedemo_socket;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author toshiba
*/
public class WebserviceDemo_Socket {
/**
* webservice的基础,套接字。
* @param args the command line arguments
*/
public static void main(String[] args) {
ServerSocket serverSocket;
DataInputStream dataInputStream = null;
DataOutputStream dataOutputStream = null;
while(true){
try {
serverSocket = new ServerSocket(1234);
System.out.println("服务端已经启动");
Socket socket=serverSocket.accept();
dataInputStream = new DataInputStream(socket.getInputStream());
dataOutputStream = new DataOutputStream(socket.getOutputStream());
String cityName = dataInputStream.readUTF();
System.out.println("from client"+cityName);
//查询天气
String result ="sunshine";
dataOutputStream.writeUTF(result);
} catch (IOException ex) {
Logger.getLogger(WebserviceDemo_Socket.class.getName()).log(Level.SEVERE, null, ex);
} finally{
if(null!=dataInputStream){
try {
dataInputStream.close();
} catch (IOException ex) {
Logger.getLogger(WebserviceDemo_Socket.class.getName()).log(Level.SEVERE, null, ex);
}
}
if(null!=dataOutputStream){
try {
dataOutputStream.close();
} catch (IOException ex) {
Logger.getLogger(WebserviceDemo_Socket.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
}
}
客户端套节字代码
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package webservicedemo_socket_client;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author toshiba
*/
public class WebserviceDemo_Socket_Client {
public static void main (String[]args){
Socket socket=null;
DataOutputStream outputStream=null;
DataInputStream inputStream=null;
try {
socket = new Socket("127.0.0.1",1234);
outputStream = new DataOutputStream(socket.getOutputStream());
String cityName ="北京";
outputStream.writeUTF(cityName);
System.out.println("to server"+cityName);
inputStream = new DataInputStream(socket.getInputStream());
String result = inputStream.readUTF();
System.out.println("from server"+result);
} catch (IOException ex) {
Logger.getLogger(WebserviceDemo_Socket_Client.class.getName()).log(Level.SEVERE, null, ex);
}finally{
if(null!=socket){
try {
socket.close();
} catch (IOException ex) {
Logger.getLogger(WebserviceDemo_Socket_Client.class.getName()).log(Level.SEVERE, null, ex);
}
}
if(null!=outputStream){
try {
outputStream.close();
} catch (IOException ex) {
Logger.getLogger(WebserviceDemo_Socket_Client.class.getName()).log(Level.SEVERE, null, ex);
}
}
if(null!=inputStream){
try {
inputStream.close();
} catch (IOException ex) {
Logger.getLogger(WebserviceDemo_Socket_Client.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
}
实例使用代码,新建一个项目:
天气查询接口
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package webservice_jaxws_first;
/**
* 天气查询
* @author toshiba
*/
public interface WeatherInterface {
public String queryWeather(String cityName);
}
创建项目接口实现类
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package webservice_jaxws_first.impl;
import javax.jws.WebService;//JDK自带的jar包。
import webservice_jaxws_first.WeatherInterface;
/**
*
* @author toshiba
*/
@WebService //使用注解
public class WeatherInterfaceImpl implements WeatherInterface {
@Override
public String queryWeather(String cityName) {
System.out.println("from client"+cityName);
String result="晴朗";
return result;
}
}
启动这个口,向外部发送webservice的服务
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package webservice_jaxws_first_server;
import javax.xml.ws.Endpoint;
import webservice_jaxws_first.impl.WeatherInterfaceImpl;
/**
*
* @author toshiba
*/
public class Server {
public static void main (String []args){
String address ="http://127.0.0.1:12345/weather";
Endpoint.publish(address, new WeatherInterfaceImpl());
System.out.print("发布webservice");
}
}
在浏览器中查看wbservice的服务
在IDE中创建项目,wsimportantproject,然后在DOS窗口中使用wsimport.exe,
wsimport简介:
java自带的解析wbservice的xml生成Java代码,就是webservic地图
然后在该项目中新建客户端,调用webservice地图,请求服务端。
项目目录结构如下:
请求的测试代码:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package webservice_jaxws_first.client;
import webservice_jaxws_first.impl.WeatherInterfaceImpl;
import webservice_jaxws_first.impl.WeatherInterfaceImplService;
/**
*
* @author toshiba
*/
public class WbserviceClient {
public static void main(String[]args){
//通过webService的的视图
WeatherInterfaceImplService weatherService = new WeatherInterfaceImplService();
//通过视图得到服务端点
WeatherInterfaceImpl weatherInterfaceImpl = weatherService.getWeatherInterfaceImplPort();
//通过服务端点调用webservice接口
String result= weatherInterfaceImpl.queryWeather("北京");
System.out.println("from server"+result);
}
}