Users can connect to Server B but will not be able to select from whatever table the snapshot agent is currently working on since it will be locked by the bcp process the snapshot agent is running.
but the client don't want to add the primary key for all tables
Wow :blink:...What a great opportunity for you to teach your client about why it's a good idea to put a PK on tables.
While other people have mentioned log shipping and it sounds like it may be applicable to your situation, remember that log shipping covers the entire database. If you're replicating every table perhaps log shipping is a better solution. If you're replicating only a few tables log shipping may not be the best solution.