Java学习之路(23)----socket使用(TCP)

文章目录

按照教程,出错:

在Eclipse中,在运行的时候我们是不能给程序指定参数的

因此:

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String clientName = args[0];	
		System.out.println(clientName);	
		
	}

出错。

所以采用Scanner


客户端:
连接到本地
记得要关闭套接字

package my.tcp.demo;

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

import org.omg.CORBA.portable.UnknownException;

public class TCPTest {

	public static void main(String[] args){
		// TODO Auto-generated method stub
		//System.out.println("请输入将要连接的服务器名及端口号:");	
//		Scanner ssScanner=new Scanner(System.in);	
//		String clientName = ssScanner.next();
//		int post = ssScanner.nextInt();
		String clientName = "localhost";
		int post = 6666;
		System.out.println("clientName:"+clientName);	
		System.out.println("post:"+post);	
		try {
			InetAddress ip=InetAddress.getByName(clientName);
//			System.out.println(ip);	
//			System.out.println(post);
			Socket client=new Socket(ip,post);
			System.out.println("client get server ip:"+client.getRemoteSocketAddress());
			//返回套接字的输出流,并给oo
			OutputStream oo=client.getOutputStream();
			//创建一个新的数据流,该引用类型指向oo,用以将数据写入基础输出流oo
			DataOutputStream out=new DataOutputStream(oo);
			//将数据写入数据流
			out.writeUTF("gyyyyy"+client.getLocalPort());
		    client.close();
			
		}catch(UnknownHostException e) {
			e.printStackTrace();
		}catch(IOException e) {
			e.printStackTrace();
		}
		
		
	}

}

服务器:

package my.tcp.demo;

import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketTimeoutException;

class GreetingServer extends Thread{
	int timeout=30000;
	private ServerSocket serverSocket;
	GreetingServer(int post) throws IOException{
		//创建绑定到post端口的套接字
		serverSocket=new ServerSocket(post);
		//指定超时值
		serverSocket.setSoTimeout(timeout);
	}
	
	public void run() {
		System.out.println("server port :"+serverSocket.getLocalPort());
		Socket ssSocket;
		try {
			//监听并接受连接
			ssSocket = serverSocket.accept();
			System.out.println("server get client ip:"+ssSocket.getRemoteSocketAddress());
			InputStream ins=ssSocket.getInputStream();
			DataInputStream data=new DataInputStream(ins);
			System.out.println("server接收:"+data.readUTF());
			server.close();
		}catch(SocketTimeoutException s) {
			System.out.println("接收超时");
			
		}catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
}
public class ServiceTest {
	
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		//创建绑定到指定端口的服务器套接字
		int post =6666;
		GreetingServer greetingServer=new GreetingServer(post);
		greetingServer.start();	
		
	}

}


客户端窗口:

clientName:localhost
post:6666
client get server ip:localhost/127.0.0.1:6666

服务器窗口:

server port :6666
server get client ip:/127.0.0.1:54896
server接收:gyyyyy54896

反馈:

客户端:

package my.tcp.demo;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

import org.omg.CORBA.portable.UnknownException;

public class TCPTest {

	public static void main(String[] args){
		// TODO Auto-generated method stub
		//System.out.println("请输入将要连接的服务器名及端口号:");	
//		Scanner ssScanner=new Scanner(System.in);	
//		String clientName = ssScanner.next();
//		int post = ssScanner.nextInt();
		String clientName = "localhost";
		int post = 6666;
		System.out.println("clientName:"+clientName);	
		System.out.println("post:"+post);	
		try {
			InetAddress ip=InetAddress.getByName(clientName);
//			System.out.println(ip);	
//			System.out.println(post);
			Socket client=new Socket(ip,post);
			System.out.println("client get server ip+port:"+client.getRemoteSocketAddress());
			//返回套间字的输出流,并给oo
			OutputStream oo=client.getOutputStream();
			//创建一个新的数据流,该引用类型指向oo,用以将数据写入基础输出流oo
			DataOutputStream out=new DataOutputStream(oo);
			//将数据写入数据流
			System.out.println("client发……");
			out.writeUTF("我是客户端gyyyyy"+client.getLocalPort()+",收到请回答");
			InputStream ii=client.getInputStream();
			DataInputStream ii2=new DataInputStream(ii);
			System.out.println("client接收中……");
			System.out.println("client get server ip:"+ii2.readUTF());
			client.close();
			
		}catch(UnknownHostException e) {
			e.printStackTrace();
		}catch(IOException e) {
			e.printStackTrace();
		}
		
		
	}

}

服务器:

package my.tcp.demo;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketTimeoutException;

class GreetingServer extends Thread{
	int timeout=30000;
	private ServerSocket serverSocket;
	GreetingServer(int post) throws IOException{
		//创建绑定到post端口的套接字
		serverSocket=new ServerSocket(post);
		//指定超时值
		serverSocket.setSoTimeout(timeout);
	}
	
	public void run() {
		System.out.println("server port :"+serverSocket.getLocalPort());
		Socket ssSocket;
		try {
			//监听并接受连接
			ssSocket = serverSocket.accept();
			System.out.println("server get client ip:"+ssSocket.getRemoteSocketAddress());
			InputStream ins=ssSocket.getInputStream();
			DataInputStream data=new DataInputStream(ins);
			System.out.println("server接收:"+data.readUTF());
			
			OutputStream ous=ssSocket.getOutputStream();
			DataOutputStream outdata=new DataOutputStream(ous);
			System.out.println("服务器反馈");
			outdata.writeUTF("我是服务器,数据已经接收"+ssSocket.getLocalAddress());
 			ssSocket.close();
		}catch(SocketTimeoutException s) {
			System.out.println("接收超时");
			
		}catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
}
public class ServiceTest {
	
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		//创建绑定到指定端口的服务器套接字
		int post =6666;
		GreetingServer greetingServer=new GreetingServer(post);
		greetingServer.start();	
		
	}

}

客户端窗口:

clientName:localhost
post:6666
client get server ip+port:localhost/127.0.0.1:6666
client发……
client接收中……
client get server ip:我是服务器,数据已经接收/127.0.0.1

服务器窗口:

server port :6666
server get client ip:/127.0.0.1:55991
server接收:我是客户端gyyyyy55991,收到请回答
服务器反馈
发布了53 篇原创文章 · 获赞 4 · 访问量 1317

猜你喜欢

转载自blog.csdn.net/weixin_43351473/article/details/104931750