Which is the best method for sending a data using sockets:
Method 1: Creating a new socket every time when data needs to be sent and closing it when the transfer is complete.
Method 2: Using the same socket instead of creating a new socket and maintaining the connection even when waiting for new data.
That depends. Creating a new socket means two computers have to discover each other, so there is name lookup, TCP/IP routing and resource allocation involved. Not really cheap but not that expensive either. Unless you send data more than 10 times/second, you won't notice.
If you keep a socket open and don't send data for some time, a firewall between the two computers will eventually decide that this connection is stale and forget about it. The next data packet you send will fail with a timeout.
So the main difference between the two methods is whether you can handle the timeout case properly in your code. You will have to handle this every time you write data to the socket.
In many cases, the code to write is hidden very deep somewhere and the code doesn't actually know that it's writing to a socket plus you will have more than one place where you write data, so the error handling will leak into your design. That's why most people prefer to create a new socket every time, even if it's somewhat expensive.
It depends on the kind of socket, but in the usual cases it is better to keep the socket unless you have very limited resources.
In summary: If you are using TCP you almost always better keep the socket open and close it only if you lack the necessary resources to keep it open. A good compromise is to close the socket as long as you have enough activity on the socket. This is the approach usually done with HTTP persistent connections.