public class SocketClient
{
public static void main(String args[]) throws Exception
{
Socket socket = new Socket("192.168.100.236", 2221);
System.out.println("socket created");
//send request
OutputStream os = socket.getOutputStream();
DataOutputStream oos = new DataOutputStream(os);
//协议的数据类型
oos.write("1".getBytes());//在发送正式数据之前,先发送这个协议的数据类型标记,相当于一个头
oos.flush();
//将f:\leave.jpg发送给服务端
BufferedInputStream fis = new BufferedInputStream(new FileInputStream("f:\\leave.jpg"));
byte[] buf = new byte[1024];
int length;
while((length = fis.read(buf, 0, buf.length))!=-1)
{
oos.write(buf, 0, length);
oos.flush();
}
socket.shutdownOutput();
//receive response
InputStream is = socket.getInputStream();
ObjectInputStream ois = new ObjectInputStream(is);
MsgTO obj = (MsgTO) ois.readObject();
System.out.println("Received:"+obj);
if(obj != null)
{
System.out.println("status="+obj.getStatus());
System.out.println("response="+obj.getResponse());
}
socket.shutdownInput();
//close resource
oos.close();
fis.close();
os.close();
socket.close();
}
}
public class SocketServer
{
public static void main(String args[]) throws Exception
{
ServerSocket serverSocket = new ServerSocket(2221);
System.out.println("server socket created");
//for multiple clients
while (true) //循环监听,等待客户端的连接
{
System.out.println("***");
Socket socket = serverSocket.accept();
ServerHandler serverHandler = new ServerHandler(socket);
serverHandler.setPriority(4);//设置线程的优先级来保证运行速度, 范围为[1,10], 默认为5.
serverHandler.start();
}
}
class ServerHandler extends Thread
{
private final Logger logger = LoggerFactory.getLogger(getClass());
//与本线程相关的Socket
private Socket socket = null;
public ServerHandler(Socket socket)
{
this.socket = socket;
}
//线程执行的操作
//for file
public void run()
{
InputStream is = null;
DataInputStream ois = null;
BufferedOutputStream bos = null;
OutputStream os = null;
ObjectOutputStream oos = null;
try
{
//receives request
is = socket.getInputStream();
ois = new DataInputStream(is);
//协议的数据类型
byte[] flag = new byte[1];
int len = ois.read(flag);//在接收正式数据之前,先接收协议的数据类型,这个头信息。
logger.info("length="+len);
String flags = new String(flag);
logger.info("flag=" + flags);
//接收文件到e:\lyy.jpg
File file = new File("e:\\lyy2.jpg");
file.createNewFile();
bos = new BufferedOutputStream(new FileOutputStream(file));
byte[] buf = new byte[1024];
int length;
while((length = ois.read(buf))!=-1)
{
bos.write(buf, 0, length);
bos.flush();
}
socket.shutdownInput();
//deal is still to do
//send response
os = socket.getOutputStream();
oos = new ObjectOutputStream(os);
logger.debug("send response");
MsgTO obj = new MsgTO();
if(obj != null)
{
obj.setStatus(0);
obj.setResponse("123");
oos.writeObject(obj);
}
oos.flush();
socket.shutdownOutput();
} catch (Exception ex)
{
logger.error(ex.getMessage());
ex.printStackTrace(System.out);
} finally
{
try //close resource
{
oos.close();
bos.close();
ois.close();
is.close();
socket.close();
} catch (Exception ex)
{
ex.printStackTrace(System.out);
}
}
}
}
转载于:https://my.oschina.net/liuyuanyuangogo/blog/812176