Java网络编程2---Socket-TCP编程

Sockct:插座

Socket是关于TCP的。

端口号:两个字节->65536个端口号,一个应用程序占多个端口号;

但是假设一个应用程序占一个端口号;一台电脑会有65535个应用程序。

自己编写程序要占用端口号1024以上后的。

80端口:网页

端口号分为:TCP端口和UDP端口。每个有65535个端口。




通过管道(流)来说话

栗子:
服务器端:

package com.zhj.www;
import java.io.DataInputStream;
import java.io.InputStream;
import java.net.*;
public class TCPServer {
	public static void main(String[] args)throws Exception {
		ServerSocket ss = new ServerSocket(6666);//服务器监听6666端口口
		while(true) {	
			Socket s =ss.accept();//自身建立一个Socket与客户端连接
			System.out.println("A client connect!");//阻塞式的连接,一个客户端连接,另外一个客户端不会链接。
			DataInputStream dis = new DataInputStream(s.getInputStream());
			System.out.println(dis.readUTF());
			dis.close();
			s.close();
			
		}
	}
}

客户端:

package com.zhj.www;
import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.*;
public class TCPClient {
 public static void main(String[] args) throws Exception {
	Socket s = new Socket("127.0.0.1", 6666);//建立连接,client随机某个端口去连接服务器的6666
	OutputStream oStream = s.getOutputStream();//拿到输出管道;
	DataOutputStream dataOutputStream = new DataOutputStream(oStream);
	dataOutputStream.writeUTF("hello server!");
	dataOutputStream.flush();
	dataOutputStream.close();
	s.close();
 }
}

-----------------------------------------------------------------------------

---------------------------------------------------------------------------->

栗子1:(一端说,一端听):TestServer.java &&TestClient.java

服务器端:
package com.zhj.www;

import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TestServer {
	/*拿到服务器端的数据写到客户端*/
	public static void main(String[] args) {
		try {
			ServerSocket  ss = new ServerSocket(8888);
			while(true) {
				Socket socket  = ss.accept();
				OutputStream oStream = socket.getOutputStream();
				DataOutputStream dataOutputStream = new DataOutputStream(oStream);
				dataOutputStream.writeUTF("Hello,"+socket.getInetAddress()+"port #"+
				socket.getPort()+" bye-bye");//客户端的端口号是随机的
				dataOutputStream.close();
				socket.close();
			}
		}catch (Exception e) {
			e.getStackTrace();
			System.out.println("程序运行出错:"+e);
		}

	}

}
客户端:
package com.zhj.www;

import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ConnectException;
import java.net.Socket;

public class TestClient {
	public static void main(String[] args) {
		try {
			Socket socket = new Socket("127.0.0.1", 8888);
			InputStream is =socket.getInputStream();
			DataInputStream dInputStream = new DataInputStream(is);
			System.out.print(dInputStream.readUTF());
			dInputStream.close();
			socket.close();
		}catch (ConnectException connExc) {
			connExc.getStackTrace();
			System.out.println("服务器连接失败!");
		} 
		catch (IOException e) {
			e.getStackTrace();
		}
	}
		
}

--------------------------------------------------------------------------------->

栗子2(两端都说,两端都听) TestSocketServer.java && TestSocketClient.java

服务器端:

package com.zhj.www;

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;

public class TestSocketServer {
	public static void main(String[] args) {
		InputStream in = null;
		OutputStream out	= null;
		try {
			ServerSocket ss	= new ServerSocket(5888);
			Socket socket = ss.accept();
			in	= socket.getInputStream();
			out = socket.getOutputStream();
			DataOutputStream dataOutputStream	=	new DataOutputStream(out);
			DataInputStream dataInputStream = new DataInputStream(in);
			String string = null;
			if ((string = dataInputStream.readUTF()) != null) {
				System.out.println(string);
				System.out.println("from: "+socket.getInetAddress());
				System.out.println("Port:"+socket.getPort());
			}
			dataOutputStream.writeUTF("hi,hello");
			dataOutputStream.close();
			dataInputStream.close();
			socket.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
}

客户端:

package com.zhj.www;

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

public class TestSocketClient {
	public static void main(String[] args) {
		InputStream inputStream =null;
		OutputStream outputStream = null;
		try {
			Socket socket= new Socket("localhost", 5888);
			inputStream = socket.getInputStream();
			outputStream  =socket.getOutputStream();
			DataInputStream dataInputStream = new DataInputStream(inputStream);
			DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
			dataOutputStream.writeUTF("hey");
			String string = null;
			while((string = dataInputStream.readUTF())!= null) {
				System.out.println(string);	
			}
			dataOutputStream.close();
			dataInputStream.close();
			socket.close();
		}catch (UnknownError e) {
			e.printStackTrace();
		} 
		catch (IOException e) {
			e.getStackTrace();
		}
		
		
	}
}

栗子3:聊天程序:







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值