首页服务器socket服务器端?socket是什么呀

socket服务器端?socket是什么呀

编程之家2023-10-2365次浏览

老铁们,大家好,相信还有很多朋友对于socket服务器端和socket是什么呀的相关问题不太懂,没关系,今天就由我来为大家分享分享socket服务器端以及socket是什么呀的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!

socket服务器端?socket是什么呀

c#怎么写一个服务器端的socket

namespace SocketTest{ class Program{ public static void SendMessage(){ Socket socket= serverSocket.Accept(); Console.WriteLine("Connected a client:{0}",socket.RemoteEndPoint); socket.Send(Encoding.ASCII.GetBytes("welcome to server"));//Thread thread= new Thread(ReceiveMessage);// thread.Start();} public static void ReceiveMessage(object obj){ Socket socket=(Socket)obj; byte[] data= new byte[1024]; int len= socket.Receive(data); string dataString= Encoding.ASCII.GetString(data, 0, len); Console.WriteLine("Receive Data:{0} from{1}", dataString,socket.RemoteEndPoint);//Thread thread= new Thread(SendMessage);//thread.Start(socket);} static Socket serverSocket; static void Main(string[] args){//定义接收数据长度变量 int recv;//定义接收数据的缓存 byte[] data= new byte[1024];//定义侦听端口 IPEndPoint ipEnd= new IPEndPoint(IPAddress.Any, 5566);//定义套接字类型 serverSocket= new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//连接 serverSocket.Bind(ipEnd);//开始侦听 serverSocket.Listen(10);//控制台输出侦听状态 Console.Write("Waiting for a client");//Socket client; while(true){//一旦接受连接,创建一个客户端 Socket client= serverSocket.Accept();//获取客户端的IP和端口 IPEndPoint ipEndClient=(IPEndPoint)client.RemoteEndPoint;//输出客户端的IP和端口 Console.WriteLine("Connect with{0} at port{1}", ipEndClient.Address, ipEndClient.Port);//定义待发送字符 string welcome="Welcome to my server";//数据类型转换 data= Encoding.ASCII.GetBytes(welcome); while(true){ try{//发送 client.Send(data, data.Length, SocketFlags.None);//接收数据可以用线程也可以不用//ReceiveMessage(client); Thread thread= new Thread(ReceiveMessage); thread.Start(client);////对data清零//data= new byte[1024];////获取收到的数据的长度//recv= client.Receive(data);////如果收到的数据长度为0,则退出//if(recv== 0)// break;////输出接收到的数据//Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));//将接收到的数据再发送出去// client.Send(data, recv, SocketFlags.None);} catch(Exception){ client.Close(); serverSocket.Close();}} client.Close();}//Console.WriteLine("Disconnect form{0}", ipEndClient.Address); serverSocket.Close();}}}

java中用socket实现客户端与服务端双向连接问题

//服务端程序:

importjava.io.*;

importjava.net.*;

publicclassTCPServer{

publicstaticvoidmain(String[]args)throwsIOException{

socket服务器端?socket是什么呀

newTCPServer().init();

}

@SuppressWarnings("static-access")

privatevoidinit()throwsIOException{

@SuppressWarnings("resource")

ServerSocketserver=newServerSocket(1000);

socket服务器端?socket是什么呀

Socketclient=null;

while(true){

try{

client=server.accept();

BufferedInputStreambis=newBufferedInputStream(client.getInputStream());

byte[]b=newbyte[1024];

intlen=0;

Stringmessage="";

while((len=bis.read(b))!=-1){

message=newString(b,0,len);

System.out.print("客户端:"+client.getInetAddress().getLocalHost().getHostAddress()+"发来消息:"+message);

if("byte".equals(message.trim()))

client.close();

PrintWriterpw=newPrintWriter(client.getOutputStream(),true);

pw.println(message);

}

}catch(Exceptione){

System.err.println("客户端:"+client.getInetAddress().getLocalHost().getHostAddress()+"已断开连接!");

}

}

}

}

//客户端程序:

importjava.io.*;

importjava.net.Socket;

publicclassTCPClientimplementsRunnable{

publicstaticvoidmain(String[]args)throwsIOException{

newTCPClient().init();

}

privatevoidinit()throwsIOException{

@SuppressWarnings("resource")

finalSocketclient=newSocket("127.0.0.1",1000);

BufferedReaderin=newBufferedReader(newInputStreamReader(System.in));

Stringsend="";

while(true){

send=in.readLine();

PrintWriterout=newPrintWriter(client.getOutputStream(),true);

if(!"byte".equals(send.trim()))

out.println(send);

else{

out.println(send);

System.exit(0);

}

newThread(newTCPClient(){

@SuppressWarnings("static-access")

publicvoidrun(){

try{

BufferedInputStreambis=newBufferedInputStream(client.getInputStream());

byte[]b=newbyte[1024];

intlen=0;

while((len=bis.read(b))!=-1){

System.out.println("服务器:"+client.getInetAddress().getLocalHost().getHostAddress()+"发来消息:"+newString(b,0,len).trim());

}

}catch(IOExceptione){

System.err.println("连接服务器失败!");

}

}

}).start();

}

}

publicvoidrun(){}

}

//服务器测试结果:

客户端:192.168.0.200发来消息:001 byte

客户端:192.168.0.200发来消息:byte

客户端:192.168.0.200已断开连接!

客户端:192.168.0.200发来消息:adasd

客户端:192.168.0.200已断开连接!

//客户端测试结果:

---001号客户端--

001byte

服务器:192.168.0.200发来消息:001byte

byte//001礼貌说跟服务器说byte

---002号客户端--

adasd//002客户端直接关闭程序

服务器:192.168.0.200发来消息:adasd

socket是什么呀

套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。

一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议根进行交互的接口。

套接字是通信的基石,是支持TCP/IP协议的路通信的基本操作单元。

可以将套接字看作不同主机间的进程进行双间通信的端点,它构成了单个主机内及整个网络间的编程界面。套接字存在于通信域中,通信域是为了处理一般的线程通过套接字通信而引进的一种抽象概念。

套接字通常和同一个域中的套接字交换数据(数据交换也可能穿越域的界限,但这时一定要执行某种解释程序),各种进程使用这个相同的域互相之间用Internet协议簇来进行通信。

Socket(套接字)可以看成是两个网络应用程序进行通信时,各自通信连接中的端点,这是一个逻辑上的概念。它是网络环境中进程间通信的API(应用程序编程接口),也是可以被命名和寻址的通信端点,使用中的每一个套接字都有其类型和一个与之相连进程。

通信时其中一个网络应用程序将要传输的一段信息写入它所在主机的 Socket中,该 Socket通过与网络接口卡(NIC)相连的传输介质将这段信息送到另外一台主机的 Socket中,使对方能够接收到这段信息。

Socket是由IP地址和端口结合的,提供向应用层进程传送数据包的机制。

类型

1、数据报套接字

无连接套接字,使用用户数据报协议(UDP)。在数据报套接字上发送或接收的每个数据包都单独寻址和路由。数据报套接字不能保证顺序和可靠性,因此从一台机器或进程发送到另一台机器或进程的多个数据包可能以任何顺序到达或可能根本不到达。在数据报套接字上发送广播可能需要特殊配置。

为了接收广播数据包,数据报套接字不应该绑定到特定地址,尽管在某些实现中,当数据报套接字绑定到特定地址时也可能接收广播数据包。

2、流套接字

面向连接的套接字,使用传输控制协议(TCP)、流控制传输协议(SCTP)或数据报拥塞控制协议(DCCP)。流套接字提供了无记录边界的有序且独特的无错误数据流,并具有用于创建和销毁连接以及报告错误的明确定义的机制。

流套接字以带外功能可靠地、有序地传输数据。在 Internet上,流套接字通常使用 TCP实现,以便应用程序可以使用 TCP/IP协议在任何网络上运行。

3、原始套接字

允许直接发送和接收 IP数据包,无需任何特定于协议的传输层格式。对于其他类型的套接字,根据选择的传输层协议(例如 TCP、UDP)自动封装有效载荷,并且套接字用户不知道与有效载荷一起广播的协议头的存在。从原始套接字读取时,通常包含标头。

从原始套接字传输数据包时,自动添加标头是可选的。

大多数套接字应用程序编程接口(API),例如基于Berkeley套接字的那些,支持原始套接字。Windows XP于 2001年发布,在Winsock接口中实现了原始套接字支持,但三年后,微软出于安全考虑限制了 Winsock的原始套接字支持。

原始套接字用于与安全相关的应用程序,如Nmap。原始套接字的一个用例是在用户空间中实现新的传输层协议。

原始套接字通常在网络设备中可用,用于路由协议,例如Internet组管理协议(IGMP)和开放最短路径优先(OSPF),以及用于Internet控制消息协议(ICMP)等事情,由ping实用程序。

以上内容参考百度百科-套接字

socket服务器端和socket是什么呀的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!

土豆服务器?网易土豆服务器什么梗服务器内存和普通内存?服务器内存和普通内存有什么区别