单向通信:服务器端------->客户端
服务器端:
package com.newcapec.scoket;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServer {
public static void main(String[] args) throws Exception{
ServerSocket server =new ServerSocket(8080);
try {
System.out.println("服务器已经启动,等待客户消息****");
Socket client=server.accept();
try {
BufferedReader input =new BufferedReader(new InputStreamReader(client.getInputStream()));
boolean flag=true;
while(flag){
String line=input.readLine();
if(line.equals("exit")) {
flag=false;
System.out.println("客户不想玩了!");
}else {
System.out.println("客户端说:"+ line);
}
}
} finally {
client.close();
}
}finally {
server.close();
}
}
}
客户端:
package com.newcapec.scoket;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.*;
public class TcpClient {
public static void main(String[] args)throws Exception {
Socket client=new Socket("192.168.156.130",9999);
try {
PrintWriter output=new PrintWriter(client.getOutputStream(),true);
Scanner sc=new Scanner(System.in);
System.out.println("*****请输入您想说的话*******");
String words;
while(sc.hasNext()) {
words=sc.nextLine();
output.println(words);
System.out.println("客户端发送的消息为:"+words);
}
}finally {
client.close();
}
}
}
双向通信(用多线程):
服务器端:
package com.newcapec.scoket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class Server2 implements Runnable{
private Socket socket = null;
private PrintWriter printWriter;//文件的输出流对象,用于指定客户端进行消息发送的实现
private Scanner scanner;//键盘类,用于获得用户在键盘输入的消息内容
public Server2(Socket socket) throws IOException {
this.socket = socket;
scanner = new Scanner(System.in);
System.out.println("请服务器发送消息");
printWriter = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()),true);
}
@Override
//run方法用于服务器端给客户端发送消息
public void run() {
String msg;//要发送的消息
try {
while((msg = scanner.nextLine())!=null) {
if(msg.equals("88")) {
//isClosed:用于判断socket对象是否已经关闭掉,若关闭了,就返回true,反之为false
if(!socket.isClosed()) {
System.out.println("服务器手动与客户端断开连接");
socket.close();
}
break;
}
printWriter.println(msg);
}
}catch (IOException io) {
System.out.println("关闭socket出现问题");
}catch (Exception e) {
System.out.println("异常关闭客户端");
}
}
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(9999);
System.out.println("正在监听端口号9999");
Socket socket;
BufferedReader bufferedReader;
while(true) {
socket = serverSocket.accept();
System.out.println("一个客户端已经连接");
Thread writerThread = new Thread(new Server2(socket));
writerThread.start();
//用于接收客户端发送过来的消息内容的实现
bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String msg;//客户端发送过来的信息
try {
while ((msg = bufferedReader.readLine()) != null) {
System.out.println("客户端:" + msg);
}
serverSocket.close();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("已断开连接");
}
}
}
客户端:
package com.newcapec.scoket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class Client implements Runnable{
private Socket socket = null;
private PrintWriter printWriter;
private Scanner scanner;
public Client(Socket socket) throws IOException {
this.socket = socket;
scanner = new Scanner(System.in);
System. out.println("请客户端发送消息:");
printWriter = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()),true);
}
public void run() {
String msg;//要发送的信息
try {
while ((msg = scanner.nextLine()) != null) {
printWriter.println(msg);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
Socket socket = new Socket("192.168.157.98",3333);
System.out.println ("连接服务器成功!如果想断开连接请输入88 (回车)");
Thread tl= new Thread(new Client(socket));
tl.start();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream ()));
try {
String msg;//服务器发过来的信息
while((msg=bufferedReader.readLine())!=null) {
System.out.println("##服务器:"+msg);
}
}catch(IOException e) {
System.out.println("警告:断开连接!");
try {
if(!socket.isClosed()) {
socket.close();
}
}catch(IOException e1) {
System.out.println("读取线程:关闭socket出现错误");
}
}
System.exit(1);//将jvm中断退出
}
}