您的位置:首页 > 理论基础 > 计算机网络

多线程之简单TCP应用未完待续........

2019-04-02 11:53 323 查看

多线程之简单TCP应用

[code]/*
使用TCP协议发送数据
创建发送端Socket对象(创建连接)
获取输出流对象
发送数据
释放资源
*/
public class ClientDemo {
public static void main(String[] args) throws IOException {
System.out.println("Client");
//创建发送端Socket对象(创建连接)
Socket s = new Socket(InetAddress.getByName("127.0.0.1"),10086);
//创建线程对象
ClientThreadSend sent = new ClientThreadSend(s);
ClientThreadReceive receive = new ClientThreadReceive(s);
Thread t1 = new Thread(sent,"ClientSent");
Thread t2 = new Thread(receive,"ClientReceive");
//启动线程
t1.start();
t2.start();
}
}
[code]/*
使用TCP协议接收数据
创建接收端Socket对象
监听(阻塞)
获取输入流对象
获取数据
输出数据
释放资源
*/
public class ServerDemo {
public static void main(String[] args) throws IOException  {
System.out.println("Server");
//创建接收端Socket对象
ServerSocket ss = new ServerSocket(10086);
////监听(阻塞)
Socket s = ss.accept();
//创建线程对象
ServerThreadSend sent = new ServerThreadSend(ss, s);
ServerThreadReceive receive = new ServerThreadReceive(ss, s);
Thread t1 = new Thread(sent,"ServerSent");
Thread t2 = new Thread(receive,"ServerReceive");
//启动线程
t1.start();
t2.start();
}
}
[code]public class ClientThreadSend implements Runnable {
Socket s;
public ClientThreadSend(Socket s){
this.s = s;
}
@Override
public void run() {
while (true) {
try {
send(s);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

public synchronized void send(Socket s) throws IOException{
//获取输出流对象
OutputStream os = s.getOutputStream();
//定义数据源
//		System.out.print("client:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = null;
line = br.readLine();
//发送数据
os.write(line.getBytes());
}
}
[code]public class ClientThreadReceive implements Runnable {
Socket s;
public ClientThreadReceive(Socket s){
this.s = s;
}
@Override
public void run() {
while (true) {
try {
receive(s);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public synchronized void receive(Socket s) throws IOException{
//获取输入流对象
InputStream is = s.getInputStream();
byte[] bys = new byte[1024];
int len;//用于存储读取到的字节个数
//接收数据
len = is.read(bys);
//输出数据
System.out.print("server say:");
System.out.println(new String(bys,0,len));
}
}
[code]public class ServerThreadReceive  implements Runnable {
private ServerSocket ss;
private Socket s;
public ServerThreadReceive(ServerSocket ss,Socket s){
this.ss = ss;
this.s = s;
}
@Override
public void run(){
while (true) {
try {
receive(s);
} catch (IOException e) {
e.printStackTrace();
}
}
}
public synchronized void receive(Socket s) throws IOException{
//获取输入流对象
InputStream is = s.getInputStream();
//获取数据
byte[] bys = new byte[1024];
int len;//用于存储读取到的字节个数
len = is.read(bys);
String str = new String(bys,0,len);
System.out.print("client say:");
//输出数据
System.out.println(str);
}
}
[code]public class ServerThreadSend  implements Runnable {
private ServerSocket ss;
private Socket s;
public ServerThreadSend(ServerSocket ss,Socket s){
this.ss = ss;
this.s = s;
}
@Override
public void run(){
while (true) {
try {
send(s);
} catch (IOException e) {
e.printStackTrace();
}
}
}

public synchronized void send(Socket s) throws IOException{
//获取输出流对象
OutputStream os = s.getOutputStream();
//定义数据源
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = null;
line = br.readLine();
//发送数据
os.write(line.getBytes());
}
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: