Scoket-简单聊天
TCP 网络程序是指利用 Socket 编写的通信程序。利用 TCP 协议进行通信的两个应用程序是有主次之分的,一个是服务器程序,一个是客户端程序,两者的功能和编写方法不太一样。其中 ServerSocket 类表示 Socket 服务器端,Socket 类表示 Socket 客户端,两者之间的交互过程如下:
1,服务器端创建一个 ServerSocket(服务器端套接字),调用 accept() 方法等待客户端来连接。,
2,客户端程序创建一个 Socket,请求与服务器建立连接。
3,服务器接收客户的连接请求,同时创建一个新的 Socket 与客户建立连接,服务器继续等待新的请求。
一 ,
建立SocketDemo类
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
private static int i=0;
public static void main(String[] args){
Socket socket=null;
Socket clientSocket=null;
PrintWriter out=null;
BufferedReader in=null;
BufferedReader ins;
String serverIP="127.0.0.1"; //服务器端ip地址
int port=8891; //服务器端端口号
BufferedReader reader;
try
{
socket=new Socket(serverIP,port);
in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
out=new PrintWriter(socket.getOutputStream(),true);
//reader = new BufferedReader(new InputStreamReader(System.in));
Scanner scanner = new Scanner(System.in);
boolean flag =true;
while (true){
scanner.useDelimiter("\n");
String next = scanner.next();
if (i==0||flag) {
out.println(next);
System.out.println("发送的内容为:" +next);
}
ins=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String s = ins.readLine();
if(s!=null){
System.out.println("接收的内容是:"+s);
flag=false;
}
}
}
catch(IOException e)
{
// TODO 自动生成的 catch 块
e.printStackTrace();
}
二
建立SocketDemoServer类
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class SocketDemoServer1 {
public static void main(String[] args) {
BufferedReader in = null;
PrintWriter out = null;
BufferedReader reader;
ServerSocket serverSocket=null;
Socket clientSocket=null;
int port=8891;
String str=null;
try
{
serverSocket=new ServerSocket(port); //创建服务器套接字
System.out.println("服务器开启,等待连接。。。");
clientSocket=serverSocket.accept();// 获得链接
//接收客户端发送的内容in=new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
out = new PrintWriter(clientSocket.getOutputStream(), true);
while(true)
{
str=in.readLine();
System.out.println("接收的内容为:"+str);
if(str!=null&& str!=""){
Scanner scanner = new Scanner(System.in);
scanner.useDelimiter("\n");
String next = scanner.next();
out.println(next);
System.out.println("发送的内容是:"+next);
}else {
System.out.println("发生错误,联系管理员!");
}
}
}
catch(IOException e)
{
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
分别运行SocketDemo,SocketDemoServer类直接main方法启动(这里我一个用run,一个debug启动)
先在SocketDemo控制台输入查看效果如下
查看SocketDemoServer
如果用Scanner 类录入的话遇到空格会截取空格前的字符串 发送为了改变这个现象添加了 scanner.useDelimiter("\n");如下
三,Scoket还可以传输数据对象