67,538
社区成员
发帖
与我相关
我的任务
分享package cn.dzr.tcp.service;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
public class RecieveMessage implements Runnable
{
Socket socket;
public RecieveMessage(Socket socket)
{
this.socket = socket;
}
public void run()
{
recvice();
}
private void recvice()
{
try
{
while(true)
{
InputStream in = socket.getInputStream();
byte[] buff = new byte[1024];
int len = in.read(buff);
String ip = socket.getLocalAddress().getHostAddress();
int port = socket.getPort();
int port2 = socket.getLocalPort();
String text = new String(buff,0,len);
System.out.println("收到 ip: "+ip +"; port:"
+port +"; loclport: "+port2+ "...content:"
+ text);
if( text.equals("886"))
{
System.out.println("他说再见,我也不再理他了!");
break;
}
}
socket.close();
}
catch(IOException e)
{
e.printStackTrace();
}
}
}package cn.dzr.tcp.service;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
public class SendMessage implements Runnable
{
Socket socket;
public SendMessage(Socket socket)
{
this.socket = socket;
}
public void run()
{
sendMessage();
}
private void sendMessage()
{
try
{
OutputStream out = socket.getOutputStream();
BufferedReader bufr = new BufferedReader(new
InputStreamReader(System.in));
while(true)
{
String str = bufr.readLine();
out.write(str.getBytes());
if(str.equals("886"))
{
break;
}
}
try
{
Thread.sleep(20);
} catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
socket.close();
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package cn.dzr.tcp;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import cn.dzr.tcp.service.RecieveMessage;
import cn.dzr.tcp.service.SendMessage;
public class TcpServiceDemo
{
public static void main(String[] args) throws IOException
{
/*
* 服务端程序的编写
* 1,建立套接字,规定其使用的端口
* 2,建立连接。
* 3,获取客服端的套接字
* 4,通过客服端套接字获取客服端传过来的信息
* 5,关闭连接
*/
System.out.println("TCP服务端启动........");
//创建服务端套接字,指定端口
ServerSocket ss = new ServerSocket(10001);
//获取想连接过来的客服端程序
//这里只能获取一次么?
Socket s = ss.accept();
new Thread(new RecieveMessage(s)).start();
new Thread(new SendMessage(s)).start();
if(s.isClosed())
{
ss.close();
}
}
}
package cn.dzr.tcp;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import cn.dzr.tcp.service.RecieveMessage;
import cn.dzr.tcp.service.SendMessage;
public class TcpClientDemo
{
public static void main(String[] args) throws UnknownHostException, IOException
{
/*
* 1, 建立套接字
* 2, 建立连接
* 3, 发送数据
* 4, 关闭连接
*/
System.out.println("TCP客服端启动........");
//建立客服端套接字,该套接字连接到本地,构造函数的第一个参数为需要连接到的对象,
//第二个为服务端端口
//但该程序使用哪个端口发送数据是未知的。这里的端口是对面的服务器
Socket socket = new Socket(
InetAddress.getLocalHost().getHostName(), 10001);
// 获取输出流,然后程序可以通过输出流写入数据,数据会传输到服务端
new Thread( new SendMessage(socket)).start();
new Thread(new RecieveMessage(socket)).start();
//关闭套接字
//关于out的问题,out只是一个引用,即便不存在out,socket流也会存在
//当socket关闭之后,socket流就关闭掉,out则会指向到一个不存在的位置,自然
//也不会占用资源,所以无需关闭.
// socket.close();
}
}