一、主要涉及的类
Socket
ServerSocket
DataOutputStream
DataInputStream
二、例子
1.发送文本数据
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667importjava.net.*;
importjava.io.*;
/**
作用:使用tcp向服务端发送文本数据
时间:2015年5月29日01:42:01
步骤:
1.创建socket服务
2.获取socket的输出流
3.使用输出流发送数据
4.关闭资源
*/
classTCPClient01
{
publicstaticvoidmain(String[]agrs)throwsException
{
//1.创建socket服务
Sockets=
new
Socket(
"127.0.0.1"
,8888);
//2.获取输出流
DataOutputStreamdos=
new
DataOutputStream(s.getOutputStream());
//3.使用输出流发送数据
dos.writeUTF(
"我是小明!!"
);
dos.writeUTF(
"我是土豪!!"
);
dos.writeUTF(
"我是大人物!!"
);
dos.flush();
//4.关闭资源
dos.close();
s.close();
}
}
/**
作用:接收客户端发送过来的文本数据
时间:2015年5月29日01:59:11
步骤:
1.创建socket服务端
2.获取客户端对象
3.获取输入流
4.使用输入流读取数据,并打印在控制台上
5.关闭资源
*/
classTCPServer01
{
publicstaticvoidmain(String[]agrs)throwsException
{
//1.创建socket服务端
ServerSocketss=
new
ServerSocket(8888);
//2.获取客户端对象
Sockets=ss.accept();
//3.获取输入流
DataInputStreamdis=
new
DataInputStream(s.getInputStream());
//4.使用输入流读取数据,并打印在控制台上这里我们使用EOFException表示数据读完
try
{
while
(
true
)
{
System.out.println(dis.readUTF());
}
}
catch
(EOFExceptione){
//表示文件已经读完
}
//5.关闭资源
dis.close();
s.close();
}
}
2.图片上传
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157importjava.net.*;
importjava.io.*;
/**
作用:上传jpg照片到服务器中
时间:2015年5月29日02:37:56
步骤:
1.创建一个socket
2.创建一个File(图片)
3.把文件的流数据写入到socket的输出流中
4.等待服务器的响应
5.关闭资源
*/
classTCPPicLoadClient
{
publicstaticvoidmain(String[]args)
{
Sockets=
null
;
FileInputStreamfis=
null
;
DataOutputStreamdos=
null
;
DataInputStreamdis=
null
;
try
{
//1.创建一个socket
s=
new
Socket(
"127.0.0.1"
,8888);
//2.创建一个文件
Filefile=
new
File(
"22.jpg"
);
//3.把文件的流数据写入到socket的输出流中
fis=
new
FileInputStream(file);
dos=
new
DataOutputStream(s.getOutputStream());
intlength;
byte[]sendBuf=
new
byte[1024];
System.out.println(
"发送图片中...."
);
while
((length=fis.read(sendBuf,0,sendBuf.length))>0)
{
dos.write(sendBuf,0,length);
dos.flush();
}
//告诉服务端数据已经写完
s.shutdownOutput();
//4.等待服务器的响应
System.out.println(
"等待服务器的响应中...."
);
dis=
new
DataInputStream(s.getInputStream());
System.out.println(dis.readUTF());
}
catch
(IOExceptione)
{
e.printStackTrace();
}
finally
{
try
{
//5.关闭资源
if
(fis!=
null
)
{
fis.close();
}
if
(dos!=
null
)
{
dos.close();
}
if
(dis!=
null
)
{
dis.close();
}
if
(s!=
null
)
{
s.close();
}
}
catch
(IOExceptione){
e.printStackTrace();
}
}
}
}
/**
作用:接收客户端发送过来的数据
时间:2015年5月29日02:57:44
步骤:
1.创建一个ServerSocket
2.获取到Socket对象
3.创建一个文件
4.把Socket中的流数据写入到文件输出流中
5.返回响应给客户端
6.关闭资源
*/
classTCPPicLoadServer
{
publicstaticvoidmain(String[]args)
{
ServerSocketss=
null
;
Sockets=
null
;
FileOutputStreamfos=
null
;
DataInputStreamdis=
null
;
DataOutputStreamdos=
null
;
try
{
//1.创建一个ServerSocket
ss=
new
ServerSocket(8888);
//2.获取到Socket对象
s=ss.accept();
System.out.println(
"客户端来了:"
+s.getRemoteSocketAddress().toString());
dis=
new
DataInputStream(s.getInputStream());
dos=
new
DataOutputStream(s.getOutputStream());
//3.创建一个File
Filefile=
new
File(System.currentTimeMillis()+
".jpg"
);
fos=
new
FileOutputStream(file);
intlength;
byte[]recBuf=
new
byte[1024];
System.out.println(
"保存图片中...."
);
//4.把Socket中的流数据写入到文件输出流中
while
((length=dis.read(recBuf,0,recBuf.length))>0)
{
fos.write(recBuf,0,length);
fos.flush();
}
System.out.println(
"完成保存:"
+file.getName());
//5.返回响应给客户端
dos.writeUTF(
"上传成功"
);
dos.flush();
}
catch
(IOExceptione)
{
e.printStackTrace();
}
finally
{
try
{
//6.关闭资源
if
(dis!=
null
)
{
dis.close();
}
if
(fos!=
null
)
{
fos.close();
}
if
(s!=
null
)
{
s.close();
}
if
(ss!=
null
)
{
ss.close();
}
}
catch
(IOExceptione)
{
e.printStackTrace();
}
}
}
}