
<span style="font-size:18px;">import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerClient {
public static void main(String[] args)
{
try
{
//1.创建一个ServerSocket对象,用于返回服务器的Socket并指定服务器的端口号
ServerSocket server = new ServerSocket(8000);
Socket socket=server.accept();
//2.获取专线Socket的输入输出流
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
//3.向输出流写入字节数据
String str = "My name is jiangdongguo.How are you!";
os.write(str.getBytes());
//4.从输入流读取数据并存储到指定的字节数组中
BufferedReader br = new BufferedReader(new InputStreamReader(is));
System.out.println(br.readLine());
// byte[] buf = new byte[1024];
// int len=is.read(buf);
// System.out.println(new String(buf,0,len)); //打印实际读到的数据
socket.close();
is.close();
os.close();
server.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}</span>
<span style="font-size:18px;">import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
//实现Runnable接口子类,完成子线程任务
public class ServiceThread implements Runnable
{
Socket socket;
/*构造方法,传递一个Socket对象参数*/
public ServiceThread(Socket socket)
{
this.socket=socket;
}
/*成员方法*/
public void run()
{
try
{
/*-----------------------------------------------------------------------------------------*/
//1.获取Socket的输入流、输出流对象
InputStream is =socket.getInputStream();
OutputStream os=socket.getOutputStream();
//2.为输入流、输出流创建两个包装类
BufferedReader br = new BufferedReader(new InputStreamReader(is)); //输入流包装类
DataOutputStream dos = new DataOutputStream(os); //输出流包装类
/*-----------------------------------------------------------------------------------------*/
//3.该线程不停的读取输入流中的数据并倒序
while(true)
{
String str=br.readLine(); //从输入流中读取一行字符串
if(str.equalsIgnoreCase("quit"))
break;
String strReverse = (new StringBuffer(str).reverse().toString()); //将字符串倒序
dos.writeBytes(str+"------>"+strReverse+System.getProperty("line.separator")); //向输出流中写入字节数据
}
br.close();
dos.close();
socket.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}</span><span style="font-size:18px;">import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServer {
public static void main(String[] args)
{
try
{
ServerSocket ss = new ServerSocket(8010);//实例化一个ServerSocket对象
while(true)
{
Socket socket = ss.accept(); //等待客户端连接请求,成功后返回服务器的socket
new Thread(new ServiceThread(socket)).start(); //当连接成功,为socket通信创建一个线程并启动该线程
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}</span><span style="font-size:18px;">import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
public class TCPClient {
public static void main(String[] args)
{
try
{
//1.创建客户端socket并指定服务器IP和端口号
Socket socket = new Socket(InetAddress.getByName("192.168.1.100"),8010);
//2.获取socket的输入流、输出流
InputStream is = socket.getInputStream();
OutputStream os=socket.getOutputStream();
//3.实例化两个包装类
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
DataOutputStream dos=new DataOutputStream(os);
BufferedReader bri = new BufferedReader(new InputStreamReader(is));
while(true)
{
String strKey = br.readLine(); //从输入流读一行数据
dos.writeBytes(strKey+System.getProperty("line.separator")); //将键盘数据写入输出流
if(strKey.endsWith("quit")) //当输入quit时,断开连接
break;
else
System.out.println(bri.readLine());//从输入流读取一行数据并打印
}
socket.close();
br.close();
dos.close();
bri.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}</span>

原文:http://blog.csdn.net/u012637501/article/details/43667139