java socket套接字编程
为了完成毕业设计学习了java套接字编程
1,socket服务端编写
在服务端上,需要新建一个套接字,监听是否有客户端进行连接,连接客户端,关闭服务端
首先你要知道有一个叫做 serversocket的类,你得实例话一个这个类的对象
ServerSocket server =new ServerSocket(8000);
我创建了server 这个对象,并使用了参数为端口号的构造函数初始化了这个sercer对象
这个对象完成了创建套接字和监听的工作
接下来就是acceot()函数,用于接收客户端的连接,这个直接调用server对象里的方法即可
fd=server.accept(); //调用完了之后返回一个socket类型的对象,这里我先前定义过了Socket fd
接下了就 可以调用 fd的方法进行读写
fd.read() fd.write()
代码如下
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
try{
ServerSocket server = new ServerSocket(8880);
if(server != null){
System.out.println("创建服务端成功");
}
Socket lianJie = server.accept();
System.out.println("有客户端接入");
//获取输入通道,用来读取数据
InputStream in = lianJie.getInputStream();
byte[] mes = new byte[128];
int len;
len = in.read(mes);
//len为in.read()函数读到数据的个数
System.out.println(new String(mes,0,len));
//新构造一个字符串把byte mes[]中的数据从0开始到len读到mes,返回mes字符串
System.out.println("服务端接受数据完毕");
System.out.println("请输入要发送给客户端的消息:");
OutputStream out = lianJie.getOutputStream();
out.write("自定义输入".getBytes());
//因为out.write()函数要求byte型数据这里用调用字符串的方法getByte()把字符串转成byte类型
System.out.println("服务器发送数据完毕");
in.close();
out.close();
lianJie.close();
server.close();
}catch(Exception e){
System.out.println("创建服务器失败");
e.printStackTrace();
}
}
}
2 scoke客户端编写
客户端只要发送连接请求就行了,实例化一个Socket对象就可以完成请求连接的功能
Socket client = new Socket(" ip地址",“端口号”)
这里我调用了两个参数的Socket的构造函数,配置了这个套接字的信息,客户端的读写直接调用client 的方法就好了
代码如下
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class TestClient {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String mes;
try {
Socket client = new Socket("192.168.43.52",8880);
OutputStream out = client.getOutputStream();
System.out.println("请输入要发送的数据:");
//mes = sc.next();
mes = sc.nextLine();
out.write(mes.getBytes()); //C字符串就是数组,但java的字符串是类,数组是数组
System.out.println("客户端发送完毕"+mes);
InputStream in = client.getInputStream();
int len;
byte[] readMes = new byte[128];
len = in.read(readMes);
System.out.println("len="+len);
if(len != -1){
System.out.println("读到数据:"+new String(readMes,0,len));
}else{
System.out.println("数据错误");
}
out.close();
in.close();
client.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}